Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение "битых" файлов с СД, Копирование битых фалов с компакт-дисков 
V
    Опции темы
WolfAlone
  Дата 16.9.2008, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Доброго времени суток всем читающим данную муть. Суть программы:

После некоторых "волшебных" деформаций компакт диска некоторые байты из находящегося на нём файла размером 1024 байт перестали читаться (для примера).

Суть программы: Выяснить, какие именно байты (их порядковые номера) - прочитать невозможно. И вывести номера нечитающихся байтов в консоль (cout).

Пытаюсь сделать это примерно так:
1. Определил размер файла (в нашем случае 1024 байта)
2. Открыл файл на чтение:
Код

FILE *f=fopen("D:\file.xyz", "rb");

3. Создал цикл читающий по 1 байту из файла с помощью функции getc();
Код

...
char GetByte=getc();
...

4. Пытаюсь обработать ошибку чтения байта из файла в случае, если getc(); возвращает EOF раньше времени... Выглядит это как-то так:
Код

...
if (GetByte==EOF) {
Данный_байт_из_файла_считать_не_удалось ...
}
...

По моим гениальным разумениям - в случае, если EOF вылезет раньше истинного конца файла - значит просто данный байт из файла считать не получилось! Просто пропустим его, переведя курсор на следующий байт с помощью fseek(...); и так до конца файла. Но почему-то при "натыкании" на такой байт - программа просто вылетает из цикла, и стоит в ожиданни: "getchar()" (т.е. последней команды в программе [что бы консоль не закрывалась]).

А если это написать в Microsoft Visual C++ 2008 Express - то программа просто-напросто вылетает с ошибкой типа "Фатальная ошибка. Хотите отправить сведения в МайКрысОфт?

Собственно задача: пройтись по файлу на компакт диске и выяснить сколько байтов прочесть не удалось.  smile 


Это сообщение отредактировал(а) WolfAlone - 16.9.2008, 22:27


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
jonie
Дата 17.9.2008, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



cd-rom насколько я знаю блочное устройство. оно не читает файл байтами, а читает секторами. равно как и контрольные суммы и информация для восстановления читается секторами. вы не можете прочесть байт с cd-rom, минимум сектор (512 байт). вы его читаете с буферов.... в отладчике программы отлаживаются, а не просто так...вылетать может из-за ошибки системы (которая, к слову, не ловится на catch(), при обычных настройках компилятора)...



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
WolfAlone
Дата 17.9.2008, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Я понял. А если модифицировать задачу и читать файл не байтами, а блоками? То есть - возможно ли реализовать вышеуказанную задачу, но "байты" заменить "блоками", например по 4096 байт? И посчитать, сколько блоков на CD/DVD диске не читается?

И ещё 1 вопрос... Если у компакт-диска имеются незначительные повреждения, то читаться не будет блок целиком? Или возможно такое, что часть блока можно будет прочесть?

P.S. Всем спасибо за внимание!


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
Annihilator
Дата 18.9.2008, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



Цитата(WolfAlone @  17.9.2008,  11:58 Найти цитируемый пост)
Или возможно такое, что часть блока можно будет прочесть?

Возможно и такое что весь блок прочтется, если хватит кодов, исправляющих ошибки. Все зависит от степени повреждения


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
J0ker
Дата 18.9.2008, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



в теории (т.к. я никогда не задаваля такой задачей) можно читать raw блоки посредством системных вызовов


--------------------
user posted image
PM MAIL   Вверх
WolfAlone
  Дата 19.9.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Спасибо конечно всем огромное, что читаете эту муть и отзываетесь на "чужие проблемы", но я очень  smile 

ВСЕМ заранее спасибо огромное. 


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
Cricket2007
Дата 19.9.2008, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 19.7.2008
Где: Харьков

Репутация: нет
Всего: нет



простите что не в тему но мне интересно а сложно ли заставить привод писать диск ? ( я уже немного умею управлять ним но мне этого мало  smile )

Это сообщение отредактировал(а) Cricket2007 - 19.9.2008, 19:57
PM   Вверх
J0ker
Дата 19.9.2008, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



2 WolfAlone
смотреть в направлении DeviceIoControl c IOCTL_CDROM_RAW_READ
но мне почему-то кажется что уровень ваших знаний пока недостаточен для разбора сырых данных  smile 

Это сообщение отредактировал(а) J0ker - 19.9.2008, 20:02


--------------------
user posted image
PM MAIL   Вверх
J0ker
Дата 19.9.2008, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(WolfAlone @ 19.9.2008,  18:01)
Спасибо конечно всем огромное, что читаете эту муть и отзываетесь на "чужие проблемы", но я очень  smile 

ВСЕМ заранее спасибо огромное.

http://msdn.microsoft.com/en-us/library/cc835968.aspx



--------------------
user posted image
PM MAIL   Вверх
andrew_121
Дата 19.9.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 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


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Cricket2007
Дата 20.9.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 19.7.2008
Где: Харьков

Репутация: нет
Всего: нет





Я так понял это мне пасиб за ссылки 
PM   Вверх
andrew_121
Дата 20.9.2008, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(Cricket2007 @  20.9.2008,  00:42 Найти цитируемый пост)
Я так понял это мне пасиб за ссылки 

Вам обоим.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2956 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.