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

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

Разбиение файла на части [D6, WinXP]


anonymous ©   (2004-09-13 11:16:00) 

Добрый день (вечер)!!!! Помогите пожалуйста. Необходимо файл разбить на части, размером меньше, а затем собрать в первоначальный вид. Пробовал использовать компонент ZIP TV, но не смог нейти данной функции и в примерах (поставляемых с етим компонентом) также ничего похожего не нашёл.


anonymous   (2004-09-15 10:19:00) [1]

Спасибосо всем кто откликнулся.
Код kukuikar'а нормольно работает. Ему отдельное спасибо!!!!


kukuikar   (2004-09-14 11:37:00) [2]


> А склеить файлы вообще тривиально можно коммандой copy...
> ;)

мона-мона:)


icebeerg   (2004-09-14 10:53:00) [3]

> Рамиль ©   (14.09.04 10:48) [8]
Согласен, но это первое, что на ум приходит. Читать и писать файлы посимвольно это... :)


icebeerg   (2004-09-14 10:50:00) [4]

> kukuikar ©   (14.09.04 10:32) [7]
Кинул таки anonymous'у функции. А я уже сам начал писать с использование BlockRead и BlockWrite. Но твоего кода хватит.
А склеить файлы вообще тривиально можно коммандой copy... ;)


Рамиль   (2004-09-14 10:48:00) [5]

icebeerg ©   (14.09.04 10:28) [6]
Только не надо делать

> var f:file of char;
это будет через одно место.


kukuikar   (2004-09-14 10:32:00) [6]

//резать
//размер кусков указывается в байтах
functionSplitFile(FileName : TFileName; SizeofFiles :Integer): Boolean;
var
 i : Word;
 fs, sStream: TFileStream;
 SplitFileName: String;
begin
 fs := TFileStream.Create(FileName, fmOpenRead orfmShareDenyWrite);
  try
    fori := 1 toTrunc(fs.Size / SizeofFiles) + 1 do
    begin
     SplitFileName := ChangeFileExt(FileName, '.'+ FormatFloat('000', i));
     sStream := TFileStream.Create(SplitFileName, fmCreate orfmShareExclusive);
      try
        iffs.Size - fs.Position < SizeofFiles then
         SizeofFiles := fs.Size - fs.Position;
       sStream.CopyFrom(fs, SizeofFiles);
      finally
       sStream.Free;
      end;
    end;
  finally
   fs.Free;
  end;
end;

//клеить
//чтобы собрать файлы нужно указать первый кусок.
//он будет с расширением *.001
functionCombineFiles(FileName, CombinedFileName : TFileName) : Boolean;
var
 i: integer;
 fs, sStream: TFileStream;
 filenameOrg: String;
begin
 i := 1;
 fs := TFileStream.Create(CombinedFileName, fmCreate orfmShareExclusive);
  try
    whileFileExists(FileName) do
    begin
     sStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
      try
       fs.CopyFrom(sStream, 0);
      finally
       sStream.Free;
      end;
     Inc(i);
     FileName := ChangeFileExt(FileName, '.'+ FormatFloat('000', i));
   end;
 finally
   fs.Free;
 end;
end;
//вот собственно и все
//можно еще добавить проверку CRC32


icebeerg   (2004-09-14 10:28:00) [7]

>anonymous   (14.09.04 09:34) [3]
Нет, ну это издевательство какое-то. Ты вообще хоть книжки то читаеш? Головой думаш? Если до вечера никто не сподобиться кинуть тебе готовый алгоритм так уж и быть сделаю...


dima_shapkin   (2004-09-14 10:07:00) [8]

CreateFile, ReadFile, WriteFile...
See Windows SDK


Рамиль   (2004-09-14 09:38:00) [9]

TFileStream + F1


anonymous   (2004-09-14 09:34:00) [10]

kukuikar: Нужен алгоритм, а лучше готовая процедура.

icebeerg: Открыть файл как символьный это понятно, а как зделить из первых 200 символов новый файл? И как потом собрать все куски в один файл? Подскажи пожалуйста!


icebeerg   (2004-09-13 12:45:00) [11]

var f:file of char;

...

AssignFile(f,...
repeat
...
until EOF(f);

Сам идею разовьеш?


kukuikar   (2004-09-13 11:36:00) [12]

так тебе нужна прога или алгоритм?


Наверх

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