Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.017 c
15-1198320049
TUser
2007-12-22 13:40
2008.01.27
Windows Defender


3-1190481366
monik
2007-09-22 21:16
2008.01.27
Активация роли приложения


15-1198003654
Kolan
2007-12-18 21:47
2008.01.27
А как сделать скриншоты с видео?


5-1165478390
Незнайка111
2006-12-07 10:59
2008.01.27
ImageIndex


3-1190350616
Mery
2007-09-21 08:56
2008.01.27
StartTransaction.