![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разбиение файла на части [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]так тебе нужна прога или алгоритм?