Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Копирование n-ое кол-во файлов в один [D6, Win95/98, WinME, NT4, Win2k, WinXP]


CoolMan ©   (2004-10-24 23:25:00) 

Уважаемые Мастера!

Читал много статей по сабжу на форуме, но то что нужно не нашел.

Помогите пожалуйста:

Проблема следующего плана: как можно скопировать неизвестное количество файлов с разными разрешениями в один. Пути к копируемым файлам находится в ListView / Columns / 0 - Name. Путь файла, в который копируется, находится в Edit.

Всем примного благодарен!


Алхимик   (2004-10-27 17:08:00) [1]

А архиватором воспользоваться?
Вызывать через ShellExecute.


begin...end   (2004-10-27 16:30:00) [2]


> [18] CollMan   (27.10.04 16:22)

А зачем нужны эти красивости в виде "------END-----" и т. д.? Это текстовый файл будет, что ли? Если нет, то достаточно просто записывать, например, сначала путь к очередному присоединённому файлу, потом размер, потом само содержимое. Никаких проблем с последующей расшифровкой вроде не должно возникнуть.


CollMan   (2004-10-27 16:22:00) [3]

Огромное всем спасибо!!! Особая благодарность 2 Digitman!!! То что надо.

Не могли бы Вы помочь вот с чем: используя ответ [6] от Digitman
получается файл со следующей картиной:

xxxxxxxx
xxxxxxxx
xxyyyyyy
yyyyyyyy

где запись с "х" - 1 файл, а "у" - второй.

Как сделать так чтобы конечный файл имел вид:

C:\xxx\xxx.html
--------------
xxxxxxxxxxx
xxxxxxxxxxx
xxx
------END-----
Size: 183827
==============
D:\yyy\yyy.txt
--------------
yyyyyyyyyyy
yyyyy
------END-----
Size: 84775
==============

Заранее Всем огромная благодарность!!!


Amoeba   (2004-10-25 20:01:00) [4]

И еще. По поводу удобства. Это как конторские счеты и калькулятор.


Amoeba   (2004-10-25 20:00:00) [5]


> А SFS вроде как платный?

Бесплатный без исходников и для некоммерческого использования (только NagScreen при запуске программы). Сам успешно использую. Если надо, могу дать ссылку (хотя они уже были раннее в форуме) где можно скачать исходники.


ЮрийК   (2004-10-25 19:57:00) [6]

"А с SFS ни о чем таком думать не надо (ссылку хоть смотрел?). Просто открываешь SFSStream с указанием пути как к обычному файлу. Легко добавлять, удалять, перемещать, изменять."

А SFS вроде как платный? Есть о чём подумать значит. А что сложного в том, что я привёл? Единственное, что ещё и имена добавить нужно наверное.


Amoeba   (2004-10-25 18:14:00) [7]


> ЮрийК ©   (25.10.04 16:37) [13]
> Первые четыре байта - количество файлов (К)
> Последние (К * 4) байтов - позиции начала каждого файла
> в едином файле
> Ну и используй CreateMappedFile/FileMappedView и т.д. (Читай
> Рихтера в общем).

А с SFS ни о чем таком думать не надо (ссылку хоть смотрел?). Просто открываешь SFSStream с указанием пути как к обычному файлу. Легко добавлять, удалять, перемещать, изменять.


ЮрийК   (2004-10-25 16:37:00) [8]

Первые четыре байта - количество файлов (К)
Последние (К * 4) байтов - позиции начала каждого файла в едином файле
Ну и используй CreateMappedFile/FileMappedView и т.д. (Читай Рихтера в общем).


TUser   (2004-10-25 12:16:00) [9]


> Ну и копируй в один файл, предварительно проведи ликбез
> по этой команде

Предполагается, что еще и разделять надо уметь


Anatoly Podgoretsky   (2004-10-25 12:13:00) [10]

TUser ©   (25.10.04 11:37) [9]
Ну и копируй в один файл, предварительно проведи ликбез по этой команде


Amoeba   (2004-10-25 11:40:00) [11]


> Плохиш ©   (25.10.04 11:32) [8]
> А чем команда DOS copy не угодила?

Наверное автору надо потом иметь легкий доступ к этим файлам, объединенным в один.


TUser   (2004-10-25 11:37:00) [12]


> А чем команда DOS copy не угодила?

А надо в один файл


Плохиш   (2004-10-25 11:32:00) [13]

А чем команда DOS copyне угодила?


Amoeba   (2004-10-25 11:24:00) [14]


> TUser ©   (25.10.04 10:47) [5]
>
> > как можно скопировать неизвестное количество файлов с
> разными
> > разрешениями в один.
>
> http://www.aidaim.com/products/sfs/sfs_spec.php- оно?

Я лично использую это решение.

Судя по вопросу (раз расширения разные, то и форматы - должны быть разными, и как-то станно было бы использовать простое их "сшивание", как в ответе [6]), задача решается с помощью SFS (библиотека Single File System).


Digitman   (2004-10-25 11:11:00) [15]


> CoolMan


var
 Source, Target: TStream;

..

Target := TFileStream.Create(Edit.Text, fmcreate);
try
with ListView do
for i := 0 to Items.Count - 1 do
 begin
  Source := TFileStream.Create(Items[i].Caption, fmRead);
  try
   Target.CopyFrom(Source, Source.Size);
  finally
   Source.Free;
  end;
 end;
finally
Target.Free;
end;


TUser   (2004-10-25 10:47:00) [16]


> как можно скопировать неизвестное количество файлов с разными
> разрешениями в один.

http://www.aidaim.com/products/sfs/sfs_spec.php- оно?


Digitman   (2004-10-25 10:23:00) [17]

тогда что понимать под "неизвестное количество файлов", если количество файлов есть кол-во элементов списка ListView, т.е. значение св-ва ListView.Items.Count ?


Ozone   (2004-10-25 10:22:00) [18]

BlockRead, BlockWrite


CoolMan   (2004-10-25 10:11:00) [19]


> т.е. Listview содержит лишь список каталогов, откуда должны
> быть взяты файлы ?


В Listview содержится список каталогов и название файла.
Наример:
C:\xxx\yyy.html
D:\111\222\333.txt
и т.д.


Digitman   (2004-10-25 09:58:00) [20]


> с разными разрешениями


может быть таки "расширениями", а не "разрешениями" ?


> неизвестное количество


т.е. Listview содержит лишь список каталогов, откуда должны быть взяты файлы ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо