C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Идентификация файла
Евгений
Отправлено: 15.02.2006, 10:06


Не зарегистрирован







Вопрос этот может иметь множество решений, но всё-таки хотелось бы узнать, как это делается наиболее профессионально.

Описание: приложение сохраняет результаты своей работы в файл. Сохранённый файл можно открывать для просмотра, редактирования и т.д. Но вот такая ситуация: случайно открываем файл, имеющий тоже расширение, но сохранённый совсем другим приложение. Естественно наша программа говорит "фи". Так вот: как распознавать "свой" или "чужой" файл ?
Только не try...catch — потому как файл всё таки может быть сохранён этим приложением, но в процессе записи или какой нить другой операции частично повреждён. Как например файлы картинок могут быть повреждены, но тем не менее откроется какая-то его часть.

Спасибо.
Grigoriy
Отправлено: 15.02.2006, 10:20


Мастер участка

Группа: Участник
Сообщений: 381



Ну и какая проблема в этом ?
Я не понимаю тогда, почему так сложно выбрать расширение для своего типа файлов, отличное от других расширений ?
Guest
Отправлено: 15.02.2006, 11:06


Не зарегистрирован







QUOTE

как распознавать "свой" или "чужой" файл ?

Метить, например, вставкой определенной цепочкой байт в определенных местах файла. (вспомните RIFF)
Использовать алгоритм проверки внутренней непротиворечивости данных, соответствующей логике данного типа файла.
А лучше оба сразу — первый говорит о принадлежности, второй позволяет защищать прогамму от некорректных данных и, хотя бы частично, спасать данные.
Евгений
Отправлено: 15.02.2006, 11:13


Не зарегистрирован







Дело не в расширении. Выбрать можно.
Aptem
Отправлено: 15.02.2006, 16:32


Мастер участка

Группа: Участник
Сообщений: 349



Многие файлы идентифицируются определенным количеством байт в начале ( как и сказал Guest ). Например, в каждом bmp-файле первые два байта это слово bm. В файлах со структурой hdf, первое слово NCSA.

Мне кажется это самый простой и надежный способ идентификации.
Евгений
Отправлено: 16.02.2006, 10:38


Не зарегистрирован







Спасибо за советы.

Вернуться в Вопросы программирования в C++Builder