Текущий архив: 2008.01.27;
Скачать: CL | DM;
Вниз
Проконсультируйте по поводу работы с файлами Найти похожие ветки
← →
ProgRAMmer Dimonych © (2007-12-21 00:03) [0]Пишу программу, которая должна будет работать с файлами разных размеров (от десятков байт до десяткой и сотен мегабайт). Файлы, с которыми работает программа по желанию пользователя может содержать кроме информации, которая обрабатывается программой, копии графических и звуковых файлов (за счёт которых, вообще говоря, в основном и возрастают размеры).
Собственно, вопросы, по которым хотелось бы услышать дельные советы...
1. При редактировании файлов программой графика и звук должны оставаться "внутри" этих самых файлов (т.е. после редактирования и сохранения эти графику и звук можно извлечь из файла). Каким образом лучше реализовать пересохранение информации программой? Простейший вариант, который сразу напрашивается - создавать временный файл, копировать в него всё нужное из редактируемого файла, потом редактируемый файл закрывать и удалять, а временный переименовывать. Способ кривой, но рабочий, но, может быть, кто-нибудь посоветует чего-нибудь более красивое.
2. Стоит ли связываться с чтение/записью файлов в режиме overlapped? И нет ли случайно каких-нибудь неприятных побочных эффектов у этого режима (другого слова не придумал :))?
← →
Zeqfreed © (2007-12-21 00:06) [1]Формат файлов?
← →
homm © (2007-12-21 00:09) [2]> [0] ProgRAMmer Dimonych © (21.12.07 00:03)
> графика и звук
MP3 поддерживает сохранение внутри картинок и текста. Криво, но вариант…
← →
ProgRAMmer Dimonych © (2007-12-21 00:19) [3]> Zeqfreed © (21.12.07 00:06) [1]
Программы? В начале файла небольшой заголовок, дальше идут графика и звук, сопровождаемые несколькими байтами, описывающими настройки отображения/воспроизведения, каждый. Потом - всякая мелочь, которая может использовать присутствующие в файле картинки и звук. Мультимедиа-файлы просто копируются целиком без изменений в файл.
> homm © (21.12.07 00:09) [2]
> MP3 поддерживает сохранение внутри картинок и текста. Криво,
> но вариант…
Придумать свой формат файла для меня - не проблема, да и проще так будет. Так что, боюсь, mp3 - не лучший вариант.
=====
Небольшие уточнения к вопросам (на всякий случай)...
1. Имеется в виду: есть ли другие подходы для выполнения такой операции? Содержимое файла, как правило, меняется незначительно, создание копии с её последующим переименованием может анимать много времени, что непозволительно, если изменяется две-три буквы/байта.
2. Здесь хотелось бы услышать о подводных камнях, если таковые имеются. И, например, такое уточнение: часть информации (мультимедиа) копируется большими блоками - там всё понятно, overlapped будет как нельзя кстати, а что касается всякой вспомогательной информации - есть ли смысл использовать overlapped для записи фрагмента айла размеров в несколько байт?
← →
homm © (2007-12-21 00:38) [4]> [3] ProgRAMmer Dimonych © (21.12.07 00:19)
> Имеется в виду: есть ли другие подходы для выполнения такой
> операции?
Храни данные в одном месте, а текст и ссылки на данные в другом.
← →
ProgRAMmer Dimonych © (2007-12-21 16:09) [5]> homm © (21.12.07 00:38) [4]
> Храни данные в одном месте, а текст и ссылки на данные в
> другом.
Боюсь, это тоже не лучший вариант. Разбивать такой файл на несколько - это будет жутко неудобно при работе с программой (таскать один файл проще, чем 10).
=============
Вообще есть ли способ как-нибудь записывать файл поверх существующего содержимого и со вставкой (в зависимости от ситуации)? Вру, не так... WriteFile делает insert"ит или overwrite"ит данные? И можно ли реализовать вторую операцию без впомогательных файлов (вторая - это та, которую не делает WriteFile)?
← →
clickmaker © (2007-12-21 16:20) [6]
> WriteFile делает insert"ит или overwrite"ит данные?
второе, если, конечно, не перематываешь указатель сразу на конец файла
чтобы инсертить, нужно данные сдвигать вручную
← →
Сергей М. © (2007-12-21 16:30) [7]1. Ресурсные dll, структурированные хранилища
2. При решении в п.1 вопрос попросту отпадает.
← →
Юрий Зотов © (2007-12-21 17:48) [8]IStorage?
← →
Amoeba © (2007-12-21 17:57) [9]Можно использовать Single File System:
http://www.aidaim.com/single-file_delphi_virtual_file_system.htm
Single File System is a native Delphi virtual file system archive / backup library with transparent compression and strong encryption. Single File System provides an easy way to work with multiple files and folders stored as a part of a single file with advanced compression and encryption functionality. This solution encapsulates small but powerful virtual file system within a single-file storage. The mechanism of Single File System includes some advanced features of FAT and NTFS file systems and is specially optimized to achieve high performance.
← →
homm © (2007-12-21 20:09) [10]> [5] ProgRAMmer Dimonych © (21.12.07 16:09)
> Боюсь, это тоже не лучший вариант. Разбивать такой файл
> на несколько - это будет жутко неудобно при работе с программой
> (таскать один файл проще, чем 10).
Какое отношение имеет работа с программой к файлам? Или у тебя работа с программой организована чеоез проводник?
← →
ProgRAMmer Dimonych © (2007-12-22 12:40) [11]> clickmaker © (21.12.07 16:20) [6]
> > WriteFile делает insert"ит или overwrite"ит данные?
> второе, если, конечно, не перематываешь указатель сразу
> на конец файла
> чтобы инсертить, нужно данные сдвигать вручную
Спасибо.
> Сергей М. © (21.12.07 16:30) [7]
> 1. Ресурсные dll, структурированные хранилища
DLL тоже нежелательно: они всё-таки DLL :) У большинства пользователей они вообще не отображаются по умолчанию в проводнике.
> Юрий Зотов © (21.12.07 17:48) [8]
> IStorage?
Ого. Не ожидал от MS такого подарка. Если верить тому, что я смог поверхностно найти, то мощная штука. И по ходу ж не надо будет никаких дополнительных DLL с собой таскать? Ole32.dll вместе со всеми WindОСями начиная с 95 ставится?
> Amoeba © (21.12.07 17:57) [9]
> Можно использовать Single File System:
> http://www.aidaim.com/single-file_delphi_virtual_file_system.
> htm
Судя по описанию - тоже мощная штука. Но только вот платная, кажется, а у меня с финансированием проекта - беда: $0. :(
> homm © (21.12.07 20:09) [10]
> Какое отношение имеет работа с программой к файлам? Или
> у тебя работа с программой организована чеоез проводник?
Ну, если в двух словах, то эта программка не одноразовая для закрытого круга пользователей. Поэтому возникает необходимость таскать время от времени продукты её деятельности с собой. А это, как известно, большинство нынешних пользователей делает ри помощи своего спасательного круга - Проводника.
← →
Amoeba © (2007-12-22 14:44) [12]
> > Amoeba © (21.12.07 17:57) [9]
> > Можно использовать Single File System:
> > http://www.aidaim.com/single-file_delphi_virtual_file_system.
>
> > htm
>
> Судя по описанию - тоже мощная штука. Но только вот платная,
> кажется, а у меня с финансированием проекта - беда: $0.
> :(
>
Для некоммерческого использования - бесплатно. Без исходников + т.н. NagScreen при запуске программы.
P.S. Могу выслать в исходниках для D5-D7.
← →
Amoeba © (2007-12-22 14:51) [13]По поводу IStorage - структурированные хранилища.
1. Ничего с собой таскать не надо, все изначально входит в систему.
2. Есть библиотеки, упрощающие работу, например:
http://home.earthlink.net/~akonshin/delphi_ru.htm
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1009
← →
ProgRAMmer Dimonych © (2007-12-22 22:32) [14]> Amoeba © (22.12.07 14:44) [12]
> Для некоммерческого использования - бесплатно. Без исходников
> + т.н. NagScreen при запуске программы.
Nag - это уже печально. После каждой значимой компиляции патчить EXE-шник - много времени уйдёт.
> P.S. Могу выслать в исходниках для D5-D7.
Нет, ну, я не гордый. А пользовать незаконно полученные (по меньшей мере мной) исходники - да ну их :)
> Amoeba © (22.12.07 14:51) [13]
> По поводу IStorage - структурированные хранилища.
> 1. Ничего с собой таскать не надо, все изначально входит
> в систему.
Это хорошо.
> 2. Есть библиотеки, упрощающие работу, например:
> http://home.earthlink.net/~akonshin/delphi_ru.htm
> http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1009
На первую наткнулся, когда, получив ответ об IStorage, решил покопать информацию в гугле. Вторую - скачал сейчас. Ещё какой-то GSStorage нашёл. Только все они подключают всякие Classes, SysUtils, прочую фигню - а мне бы WinAPI в чистом виде. Конкретного описания IStorage тоже нигде не накопал (в MSDN - скупо и ни о чём: в теории и так всё понятно, что делать на практике - секрет MS :)).
=======
Дополнение, новый вопрос. Чего-то с поисковиком я никак не могу управиться... :(
3. Если файл открывается с параметромGENERIC_READ or GENERIC_WRITE
- то как происходит работа с этим файлом? Никогда не сталкивался, а по моим запросам гугл выкидывает работу с COM-портами.
← →
Amoeba © (2007-12-23 00:24) [15]
> Конкретного описания IStorage тоже нигде не накопал
Ищи книжку: Э.Хармон. Разработка COM-приложений в среде Delphi.
Там об этом целая глава. Все что надо на API.
В понедельник могу выслать (с работы) этот материал в отсканированном виде. Как насчет размера ящика?
← →
ProgRAMmer Dimonych © (2007-12-23 01:54) [16]> Amoeba © (23.12.07 00:24) [15]
> Как насчет размера ящика?
Хм, сколько там на mail.ru? 10 МБ/письмо или уже больше? Наверное, лучше куда-нибудь на файловый хостинг, а мне ссылочку. Буду очень благодарен.
← →
Amoeba © (2007-12-24 12:32) [17]Выслал мылом.
Страницы: 1 вся ветка
Текущий архив: 2008.01.27;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.024 c