Как создать свой формат файла
При том, что этот формат достаточно универсален, в нем можно запихнуть все что угодно. А придумывать велосипед не нужно. Сеарилизируйте туда хоть весь дамп данных программы.
Этот геморрой оправдать может лишь : задача спроектирована с шифрованием, или в учебных целях. Иначе это теряет смысл. При том, что этот формат достаточно универсален, в нем можно запихнуть все что угодно.
Например, видео. или исполняемый код. :)
Запихнуть то можно, но вот всегда ли оно того требует?
Автору топика:
слишком пространственный вопрос, все зависит от того, что ты собираешься хранить в файлах, как много, как часто, как универсально.
Например, видео. или исполняемый код. :)
Запихнуть то можно, но вот всегда ли оно того требует?
Автору топика:
слишком пространственный вопрос, все зависит от того, что ты собираешься хранить в файлах, как много, как часто, как универсально.
Дык зачем видео? Для видео есть свои форматы. Каждому - свое место. :)
Тут автор имеет ввиду скорее что лучше юзать для хранения специфических данных. В любом случае все уже приготовлено для нас - бери юзай.:)
Форматы видео придуманы богами? :)
Тут автор имеет ввиду скорее что лучше юзать для хранения специфических данных.
Что есть "специфичные данные"? Видео и исполняемый код является не специфичным?
Уверен, что все?
Мне нужно просериализовать игровой уровень (графика, звук, анимация, игровая логика, исполняемый код). Причем упаковывать буду на PC, а читать на PS2. Причем, грузиться должно не дольше 20 сек. Причем, никаких аллокаций памяти после загрузки файла. Чем не "специфичные" данные? Какой существующий формат предложишь?
Или другой пример: хочу сохранять резервную копию раздела диска.
Примеров море.
Повторюсь: все зависит от того, что именно хочешь сохранять и для чего. Если сохраняешь бинарные данные, чтоб далее использовать, как бинарные, то есть ли смысл переводить их в текстовый формат?
У XSL тоже весьма специфичная область - все что можно и целесообразно представить в текстовой табличной форме.
Нет, но они уже придуманы. Не нужно опять придумывать AVI (к примеру) формат.
Что есть "специфичные данные"? Видео и исполняемый код является не специфичным?
Я имел ввиду данные, которые пока не стандартизированы.
Уверен, что все?
Мне нужно просериализовать игровой уровень (графика, звук, анимация, игровая логика, исполняемый код). Причем упаковывать буду на PC, а читать на PS2. Причем, грузиться должно не дольше 20 сек.
Причем, никаких аллокаций памяти после загрузки файла.
Или другой пример: хочу сохранять резервную копию раздела диска.
Ну, захотел :).. десериализовать за 20 сек точно не выыйдет..
На счет сохранения разделов - так образы разве проблема сделать?
Повторюсь: все зависит от того, что именно хочешь сохранять и для чего. Если сохраняешь бинарные данные, чтоб далее использовать, как бинарные, то есть ли смысл переводить их в текстовый формат?
Конечно не имееет, а зачем? А бинарных форматов тож много. Взять тот же всем известный РЕ.
У XSL тоже весьма специфичная область - все что можно и целесообразно представить в текстовой табличной форме.
Согласен, все зависит от области применения. Можно делать и через 2 полушария (далеко не моск), например сохранять текст нот в графическом формате, чтобы потом его распознавать и проигрывать :D
Мне кажется человеку надо было бы рассказать про разделимые способы кодирования и иже с ними. Дать человеку представление, что инфа хранится более или менее самостоятельными блоками. Дать человеку мат. базу для оптимального разделения на эти самые блоки.
Задача ведь стояла "КАК СПРОЕКТИРОВАТЬ", а не как натянуть старый сапог на ногу на два размера бОльшую.
Я , к сожалению, врядле смогу эти темы осветить не то чтобы исчерпывающе, а хотя бы внятно. (
Нет, но они уже придуманы. Не нужно опять придумывать AVI (к примеру) формат.
Ну мы же не знаем, может, автор топика придумал новый способ кодирования видео. Почему бы нет?
Я имел ввиду данные, которые пока не стандартизированы.
Нестандартизированных данных было, есть и будет всегда больше чем стандартизированных.
Ну, захотел :).. десериализовать за 20 сек точно не выыйдет..
Ну так делаем же ;)
На счет сохранения разделов - так образы разве проблема сделать?
Нет, не проблема, однако с помощью XSL не имеет смысла, здесь свой формат нужен, в зависимости от того, как хотим хранить и как в последствии использовать.
Конечно не имееет, а зачем? А бинарных форматов тож много. Взять тот же всем известный РЕ.
Ну, тогда уж не PE, а COFF, т.к. PE - его частный случай.
Согласен, все зависит от области применения. Можно делать и через 2 полушария (далеко не моск), например сохранять текст нот в графическом формате, чтобы потом его распознавать и проигрывать :D
Вот поэтому и сложно дать совет, пока автор топика не раскроет свой тайный замысел.
На счет сохранения разделов - так образы разве проблема сделать?
Конечно не имееет, а зачем? А бинарных форматов тож много. Взять тот же всем известный РЕ.
Согласен, все зависит от области применения.
Тогда зачем даешь однозначную ссылку на XSL со словами "все уже придумано"?
Автор задал очень общий вопрос, вот, возможно, SkyM@n и дал общий ответ.Давайте все же дождемся пояснений автора топика. Погодите, XSL это по-прежнему eXtensible Stylesheet Language, или я что-то пропустил? Может вы про XML.
Применение собственного формата оправдано, если РАБОТА программы с ним обеспечивает значительное преимущество по сравнению с существующими стандартными.
Проблемы ХРАНЕНИЯ и ИМПОРТА не столь критичны, т.к. написать еще и собственный конвертор будет уже не такой сложной задачей, а самому процессу конвертации допустимо быть не столь быстрым.
Порывшись в гугле, оказалось, что данная тема не то чтобы плохо освещена, а совсем никак. Готовых форматов множество и они исчерпывающе описаны. Применение уже существующего формата абсолютно оправденно в большинстве прикладных задач. Но, как заметил Alex_soldier,
Применение собственного формата оправдано, если РАБОТА программы с ним обеспечивает значительное преимущество по сравнению с существующими стандартными..
Задача проектирования собственного формата не является невыполнимой, но хотелось подойти к ней системно, используя, так сказать, "мат. часть" по данному вопросу.
Я не собирался морочить голову присутствующим. У меня нет никаких тайных замыслов :). Просто интересуюсь.
Ну тогда логичнее всего хранить данные в их естественном порядке следования: чтобы кроме операций чтения-записи при обработке было минимум дополнительных преобразований (в идеале - вообще без). Задача проектирования собственного формата не является невыполнимой, но хотелось подойти к ней системно, используя, так сказать, "мат. часть" по данному вопросу.Необходимым условием полностью автоматической сериализации является наличие в рантайме ПОЛНОЙ метаинформации о типах объектов.
Порывшись в гугле, оказалось, что данная тема не то чтобы плохо освещена, а совсем никак. Готовых форматов множество и они исчерпывающе описаны. Применение уже существующего формата абсолютно оправденно в большинстве прикладных задач. Но, как заметил Alex_soldier,
Задача проектирования собственного формата не является невыполнимой, но хотелось подойти к ней системно, используя, так сказать, "мат. часть" по данному вопросу.
Я не собирался морочить голову присутствующим. У меня нет никаких тайных замыслов :). Просто интересуюсь.
Тебя интерисует двоичный или текстовый формат хоть? Если двоичный, то какие требования? Быстрота загрузки? Кроссплатформенность? Какого типа данные хранить собираешся?
Сегодня рассмотрим, как создать файл без расширения средствами операционных систем Windows без применения сторонних решений, а также при помощи бесплатных приложений, которыми пользуются миллионы людей. В самой ОС не предусмотрена подобная функция, однако это легко обойти, зная несколько секретов.
Командная строка
Универсальный инструмент, посредством которого в Windows можно сделать совершенно всё, главное, знать, каким образом.
- Запускаем командную строку любым удобным способом, например, жмём Win + R, а в появившемся окошке выполняем команду «cmd».
- В открывшемся окне с черным фоном вводим и выполняем команду «copy con>file» либо «1 >> c:\file», где file – название нашего документа. Можно вводить полный путь к файлу, если пользоваться командной строкой не умеете. Это избавит от необходимости переходить в нужный каталог в текстовом режиме.
Внимания на предупреждения или ошибки не обращаем, свою функцию команда выполнит.
Это самый простой, универсальный и быстрый способ создать пустой файл без расширения в любой версии Windows 7. Все остальные на «Семёрке» и «Десятке» будут незначительно отличаться из-за различий в интерфейсе.
Проводник
Через стандартный менеджер файлов также можно сделать файл без расширения.
- Для этого открываем каталог, в котором он должен появиться.
- Кликаем правой клавишей мыши на пустом месте в окне и вызываем пункт «Новый».
- В выпавшем списке выбираем любой пункт кроме первого.
Появится файл, название которого следует ввести.
- Вводим имя нового документа без точек или удаляем точку и жмём «Enter».
- Соглашаемся с тем, что после изменения расширения (оно идёт после точки и служит идентификатором для данного типа файлов) документ может стать недоступным.
На этом – всё готово.
Вместо создания нового документа через контекстное меню можно сделать копию любого файла и переименовать его, однако в таком случае документ будет занимать определённое место.Если он не является текстовым, открыть такой объект через блокнот будет невозможно (по крайней мере для нормальной работы с ним).
Windows 7
- Открываем Проводник, например, при помощи сочетания горячих клавиш Win + E.
- Кликаем Alt для вызова главного меню, если оно невидимо.
- Из него вызываем пункт «Сервис», в выпавшем списке выбираем «Параметры папок».
- Идём во вкладку «Вид».
- В фрейме «Дополнительные параметры» пролистываем список пунктов до самого низа и убираем флажок возле опции «Скрывать расширения для…».
- Сохраняем новую конфигурацию.
Теперь возможность изменения расширения документов доступна.
Windows 10
В Windows 8 и 10 активация и отключение функции осуществляется проще и быстрее.
- В Проводнике вызываем главное меню при помощи Alt, если оно спрятано.
- Во вкладке «Вид» отмечаем галочкой опцию «Расширение имён файлов».
Для открытия и изменения содержимого документа его необходимо перетащить в окно любого текстового редактора или через контекстное меню вызвать команду «Открыть с помощью…» и выбрать нужное приложение в выпадающем списке.
Этих способов решения проблемы вполне достаточно для всех случаев, однако мы коснёмся ещё пары вариантов решения задачи для исчерпания темы.
Блокнот
Стандартный текстовый редактор Windows не способен помочь в данной ситуации – он автоматически дописывает расширение после названия документа, даже если его не ставить.
- Скачиваем приложение с официального сайта, инсталлируем и запускаем его.
- Жмём Ctrl + S либо вызываем команду «Сохранить» через пункт главного меню «Файл».
- Вводим название документа, в поле «Тип…» указываем «AllFiles (*.*)» и кликаем «Сохранить».
Total Commander
Самый популярный и функциональный файловый менеджер для Windows также позволяет в несколько кликов создать файл без расширения.
- Открываем целевой каталог и вызываем контекстное меню папки правым кликом по пустому месту панели.
- Выбираем знакомый пункт «Новый» и указываем любой объект, кроме папки и ярлыка.
- В окошке для ввода имени пишем любое название без точки и кликаем «ОК» для создания нового объекта.
Также задачу можно решить, переименовав любой файл путём удаления точки из его названия.
Мы рассмотрели основные способы создания файлов без расширения в операционных системах Windows при помощи инструментария самой ОС и посредством популярных приложений.
Я тут увидел ветку про открытие картинок с помощью блокнота :-) Когда-то я делал что-то вроде этого: пытался написать инсталятор, суть которого была в том, что в мемо загоняется файл, а потом производится команда Memo.Lines.SaveToFile. Долго думал, почему эта программа не работает? :-))))))))
Всё закончилось благополучно: на глаза попалась статеёка про кодировки и всё встало на свои места. Теперь сетапы стараюсь делать по-нормальному (как я считаю)
Так, вот, сам вопрос
Как создать свой формат файла? Суть в том, что в одном файле хранится, к примеру текст (досье человека) и другой файл (фото этого человека) + ещё и ещё файлы (если понадобится, например засунуть вордовский дкумент. ). ООООчень большой + будет в том, что многие такой файл взломать просто не смогут (не считая меня :-) ), все данные будут сгруппированны, храниться вместе. Но программа, естественно, должна читать всё по-отдельности.
Что мне нужно на данный момент по-минимуму: в один файл "засунуть" и текст, и картинку.
Чукча - он писа"тель (знаком " отмечено ударение, а то понапишут тут)
между прочим я уже создал несколько СВОИХ форматов файла (без возможности хранить в них картинки, что очень плохо и что я хотел бы узнать) - особая структура файла, которую знает исполяемый ехе-файл.
> Не-а. Тут ышшо взятку надо дать. Без взятки - никак)
Ну ты и крут, братец кролик)
И что, все эти "форматы" ты засандалил "с помощью блокнота" ?
Да что уж там мелочиться ?)
мне нужен СВОЙ формат
> а как потом из них извлекать например картинки? и загружать
> в TImage? а?
КАК с ним программно взаимодействоать? Где найти примеры? Исходники? статьи? Ссылки?
Первым делом ты должен проштудировать имеющиеся материалы по этому формату.
Тырнет большой, в нем предостаточно таких материалов.
Ты хоть пальцем пошевелил, чтобы найти хоть что-то на эту тему ?
> как обеспечить безопасность данных? Ведь любой может взять
> и открыть TIFF файл. И посмотреть, что там! А оно мне
> надо?
Нет, ну ты, ей-ей, идиот, г-н Кулибин)
НЕНАВИЖУ чужиу СУБД. ужас, как ненавижу.
как это сделать программно?
так вот, для этого мне и нужен свой формат файла.
Ну а блокнот-то причем !?
какой блокнот? о блокноте речь не шла.
> Тебе что, встроенного в делфи редактора мало ?)
Мартышка к старости слаба ушами стала ?)
Вот цитата из твоего творчества чуть выше по тексту:
> открытие картинок с помощью блокнота
> какой такой редактор. поподробнее
а потом я написал, что это ерунда
ИТАК подводим ИТОГИ.
1) Берём картинку, разбиваем на биты, потом сохраняем вместе с текстом в файл, предварительно шифруя
2) Расширение файла ставим, например, .tifkin (естественно, стоко символов нежелательно) или .234 и сохраняем.
Впрочем, тебе видней). Но лучше таки на миллибиты - вражеская разведка будет в шоке)
А уж если та самая вражеская разведка это увидит, то просто повесится тут же на месте)
> Кто считает не так?
а внутри что будет? структура. это и есть формат
а внутренности-то я вам и не покажу
а как всё-таки обратно.
Вот ведь новость-то)
И что тебе мешает продумать, разработать и документировать эту "структуру" ? С пом. того же "Блокнота" ?
> а внутренности-то я вам и не покажу
> никто никогда его не узнает (формат-то)
Предположим что я есть представитель вражеской разведки и я знаю форматы всех "как-нибудь ZIP"ов", и мне не составляет труда узнать, что же там какой-то TIF(C) захреначил в файл в формате "такого-то ZIP"а"..
Автор же, судя по его постам, при этом попросту удавится, проделав "титаническую" работу по "созданию своего формата с помощью блокнота" и узнав об этом)
<специфические данные> = ничего для информации, "JPG" или "BMP" для картинки, имя документа - для документа и т.д.
<длина данных> = длина последующих данных.
<данные> = поток данных (структура с досье, bmp или jpg потоки и т.д.
Только добавить ещё <Заголовок файла><Дата Создания><Байтовое смещение на следующий описатель>
> например,
> <описатель><специфические данные><длина данных><данные>
> <описатель><специфические данные><длина данных><данные>
> <описатель><специфические данные><длина данных><данные>
> .
> где
> <описатель> = "DUM" для пустышки, "NFO" для информации,
> "PIC" - для картинки, "DOC" для документа и т.д.
>
> <специфические данные> = ничего для информации, "JPG" или
> "BMP" для картинки, имя документа - для документа и т.д.
>
>
> <длина данных> = длина последующих данных.
> <данные> = поток данных (структура с досье, bmp или jpg
> потоки и т.д.
>
> Дарю, однако.
> Как уже и писали тебе будет проще всего скопировать нужные
> файлы в отдельную папку и сжать эту самую папку как-нибудь
> ZIP"ом (готовых бесплатных компонентов море).
Мне ч.г. по колено, есть такие или нет таких - это проблема автора)
Существующего ничего не знаю. Естественно придётся лепить самому и кодер и декодер.
Я, честно говоря, этот формат ковырял году в 2002, так что в деталях особо не помню. Смысл был такой: есть заголовок файла, есть некая таблица, указывающая где в файле расположены Image File Directory (IFD). Каждая из этих директорий, в свою очередь, состоит из набора тэгов, часть из которых строго описана, а другая чать - оставлена за пользователем. Вот, с помощью таких пользовательских тэгов и можно любые данные туда зашивать. А текст это, другая картинка, XML или AVI - дело твоего кодера и декодера.
Любой графический вьюер, поддерживающий tiff-формат, должен уметь разбирать стандартный набор тэгов. А вот лично твой ещё может уметь разбирать собственные тэги.
а самому-то стыдно
> Жаль только Автор их не слышит)
ага ЩАЗЗЗЗЗЗЗЗЗЗЗЗЗЗ.
Что прямо ЩАЗ этим и занимаешся?)
Было время подумать (аж 5 дней), вот я и вернулся, и не впонедельник, как пророчили, а в воскресенье.
Почитал, поразбирал свои ошибки, прочистил мозги и пришёл к следующим выводам:
1) Текстовый файл - это хранилище символов, а символ - это, к примеру, 8 байт информации (или там 16, смотря какая кодировка). И если хочется создать свой формат файла,надо его писать на диск не в виде буковок, а в виде байтов, то бишь не надо обязательно кодировать элемент изображения (файла) восемью байтами, а надо как лучше: если на картинке всего 4 цвета, то и кодировать надо двумя битами, например
00 - красный
01 - жёлтый
10 - зелёный
11 - синий
3) Протестировал способ создания своего "ТЕКСТОВОГО ФОРМАТА" - закодированного формата данных.
Типа есть строчка
привет
12 булок, 3 батона
А она кодируется
окенга
зщ ропенл ъй ьвюбсч
так что, формат-кодировка получился. Безопасность данных обеспечена.
3) Понял, в чём суть формата файла: определённое количество последовательностей байтов.
Знаю, что сейчас многие скажут - нельзя так создавать файл.
Отвечу - как тогда создал файл следующий мистер:
> PS: специально сходил к невропатологу :-) Никаких заболеваний не нашли, опухоли мозга тоже нет :-)))))))))
var
f: file of byte;
begin
AssignFile(f, "c:\1.bin"); //название файла
Rewrite(f); //перезапишем файл
Write(f, 1); //запишем три байта
Write(f, 2);
Write(f, 3);
CloseFile(f);
end;
хоть я это и знал, но всё равно спасибо. Понял, в чём суть формата файла, суть записи байтов. Всё. УРА!
Надеюсь, больше писать не буду. В ЭТОЙ ветке.
PS: томографию я сделал. Всё ок! Злопыхатели, злопыхайте! А я здоров, как две тысячи семь коров! кстати, только что писал олимпиаду по математике "третье тысячелети". не сказать, что написал отлично, но неплохо. Через недельку-другую будут известны результаты.
Сегодня я дам краткие инструкции по созданию/изменению файлов любого формата.
Дело в том, что не все знают, как изменить расширение файла, например, того же .txt без всяких сторонних программ, просто методом переименовывания формата.
Всё дело в том, что хитрый Windows скрывает расширения известных (например exe, jpeg, txt ) типов файлов, чтобы Вы не могли их некоим образом случайно изменить.
Простая и быстрая настройка
- Открываем мой компьютер;
- Жмем правой кнопкой мыши на пустом месте: " Создать -> Текстовый документ ";
- Переименовываем Текстовый документ.txt в, скажем, Текстовый документ .ini
- Радуемся, что сумели создать новый файлик;
- Запоминаем урок и при необходимости применяем.
Сразу хочу предупредить, что переименовав bmp в jpg вы конечно меняете формат, но свойства рисунка не изменяться. Проще говоря - это не метод полного конвертирования, а всего лишь изменение формата. Зато запрятать какую-нибудь текстовую информацию от кого-нибудь получится легко. Берем и переименовываем дневник.txt в дневник.exe .
Послесловие
Вот такие дела. Где это может пригодится? Ну кому где.
А вообще, Вы увидите некоторые примеры того, где это нужно уже скоро, а именно в некоторых моих следующих статьях.
Белов Андрей (Sonikelf) Заметки Сис.Админа [Sonikelf's Project's] Космодамианская наб., 32-34 Россия, Москва (916) 174-8226Прямо заинтриговал вконце :) интриган. Я уметь это делать я еще в школе научилась, сама, кстати, нашла, когда "изучала" свой первый компутер :) (похвасталась)
И вот еще! Виста в этом плане не такая "хитрущая" и дает переделывать расширения! Фишка в том, что в ХР надо еще глядеть при переименовывании файла на то, чтобы расширение не стереть (если функция отображения расширения включена в настройках), а Виста не дает сделать такой досадной ошибки (изменить расширение при переименовывании файла, если его менять не надо). Ой. аж сама запуталась! Одним словом - в Висте удобнее - вот что я хотела донести бредом из слов выше ;)
> Сразу хочу предупредить, что переименовав bmp в jpg вы конечно меняете формат, но свойства рисунка не изменяться. Проще говоря - это не метод полного конвертирования, а всего лишь изменение формата. Зато запрятать какую-нибудь текстовую информацию от кого-нибудь получится легко. Берем и переименовываем дневник.txt в дневник.exe.
Ты немного напутал в терминологии. ФОРМАТ означает правило, по которому байтовое представлени файла преобразуется в то, что нам нужно. Например, файл превращается в картинку на экране. BMP и JPG - это форматы кодирования картинок.
А вот хваостик в имени файла ".jpg" и ".bmp" - это РАСШИРЕНИЕ имени файла. Оно нужно только для удобства (грубо говоря, смотрим на имя файла и уже знаем, что это за файл: картинка, видео, текст и т.п.). Второе назначение расширения - это чтобы по дабл-клику на файле система знала, чем его открыть. Т.е. в системе прописано, что если у файла расширение ".jpg" или ".bmp", то его нужно открыть просмотрщиком картинок, если ".avi" - то проигрывателем видео и т.п. При этом большинство нормальных программ НЕ СМОТРЯТ на расширение файла. Т.е. можно переобозвать ".jpg" в ".exe", а потом мышкой перетянуть файл в просмотрщик картинок и он нормально тобразится.
Читайте также: