![]() |
|
Модераторы: bsa |
![]()
|
|
| WolfAlone |
|
||||||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: нет Всего: 5 |
Доброго времени суток всем читающим данную муть. Суть программы:
После некоторых "волшебных" деформаций компакт диска некоторые байты из находящегося на нём файла размером 1024 байт перестали читаться (для примера). Суть программы: Выяснить, какие именно байты (их порядковые номера) - прочитать невозможно. И вывести номера нечитающихся байтов в консоль (cout). Пытаюсь сделать это примерно так: 1. Определил размер файла (в нашем случае 1024 байта) 2. Открыл файл на чтение:
3. Создал цикл читающий по 1 байту из файла с помощью функции getc();
4. Пытаюсь обработать ошибку чтения байта из файла в случае, если getc(); возвращает EOF раньше времени... Выглядит это как-то так:
По моим гениальным разумениям - в случае, если EOF вылезет раньше истинного конца файла - значит просто данный байт из файла считать не получилось! Просто пропустим его, переведя курсор на следующий байт с помощью fseek(...); и так до конца файла. Но почему-то при "натыкании" на такой байт - программа просто вылетает из цикла, и стоит в ожиданни: "getchar()" (т.е. последней команды в программе [что бы консоль не закрывалась]). А если это написать в Microsoft Visual C++ 2008 Express - то программа просто-напросто вылетает с ошибкой типа "Фатальная ошибка. Хотите отправить сведения в МайКрысОфт? Собственно задача: пройтись по файлу на компакт диске и выяснить сколько байтов прочесть не удалось. Это сообщение отредактировал(а) WolfAlone - 16.9.2008, 22:27 -------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
||||||
|
|||||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
cd-rom насколько я знаю блочное устройство. оно не читает файл байтами, а читает секторами. равно как и контрольные суммы и информация для восстановления читается секторами. вы не можете прочесть байт с cd-rom, минимум сектор (512 байт). вы его читаете с буферов.... в отладчике программы отлаживаются, а не просто так...вылетать может из-за ошибки системы (которая, к слову, не ловится на catch(), при обычных настройках компилятора)...
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| WolfAlone |
|
|||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: нет Всего: 5 |
Я понял. А если модифицировать задачу и читать файл не байтами, а блоками? То есть - возможно ли реализовать вышеуказанную задачу, но "байты" заменить "блоками", например по 4096 байт? И посчитать, сколько блоков на CD/DVD диске не читается?
И ещё 1 вопрос... Если у компакт-диска имеются незначительные повреждения, то читаться не будет блок целиком? Или возможно такое, что часть блока можно будет прочесть? P.S. Всем спасибо за внимание! -------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
|||
|
||||
| Annihilator |
|
|||
![]() bytegrinder ![]() ![]() Профиль Группа: Участник Сообщений: 493 Регистрация: 21.11.2006 Где: Омск Репутация: 1 Всего: 3 |
Возможно и такое что весь блок прочтется, если хватит кодов, исправляющих ошибки. Все зависит от степени повреждения -------------------- Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
в теории (т.к. я никогда не задаваля такой задачей) можно читать raw блоки посредством системных вызовов
|
|||
|
||||
| WolfAlone |
|
|||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: нет Всего: 5 |
Спасибо конечно всем огромное, что читаете эту муть и отзываетесь на "чужие проблемы", но я очень
ВСЕМ заранее спасибо огромное. -------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
|||
|
||||
| Cricket2007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 19.7.2008 Где: Харьков Репутация: нет Всего: нет |
простите что не в тему но мне интересно а сложно ли заставить привод писать диск ? ( я уже немного умею управлять ним но мне этого мало
Это сообщение отредактировал(а) Cricket2007 - 19.9.2008, 19:57 |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
2 WolfAlone
смотреть в направлении DeviceIoControl c IOCTL_CDROM_RAW_READ но мне почему-то кажется что уровень ваших знаний пока недостаточен для разбора сырых данных Это сообщение отредактировал(а) J0ker - 19.9.2008, 20:02 |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
http://msdn.microsoft.com/en-us/library/cc835968.aspx |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
WolfAlone, Вот глянь для примера:
http://www.codeproject.com/csharp/CSharpRipper.asp http://sourceforge.net/projects/cddarip http://sourceforge.net/projects/bigorrilho/ Это сообщение отредактировал(а) andrew_121 - 19.9.2008, 22:19 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Cricket2007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 19.7.2008 Где: Харьков Репутация: нет Всего: нет |
Я так понял это мне пасиб за ссылки |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |