Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизРазбиение файла на части Найти похожие ветки
← →
anonymous (2004-09-13 11:16) [0]Добрый день (вечер)!!!! Помогите пожалуйста. Необходимо файл разбить на части, размером меньше, а затем собрать в первоначальный вид. Пробовал использовать компонент ZIP TV, но не смог нейти данной функции и в примерах (поставляемых с етим компонентом) также ничего похожего не нашёл.
← →
kukuikar © (2004-09-13 11:36) [1]так тебе нужна прога или алгоритм?
← →
icebeerg © (2004-09-13 12:45) [2]var f:file of char;
...
AssignFile(f,...
repeat
...
until EOF(f);
Сам идею разовьеш?
← →
anonymous (2004-09-14 09:34) [3]kukuikar: Нужен алгоритм, а лучше готовая процедура.
icebeerg: Открыть файл как символьный это понятно, а как зделить из первых 200 символов новый файл? И как потом собрать все куски в один файл? Подскажи пожалуйста!
← →
Рамиль © (2004-09-14 09:38) [4]TFileStream + F1
← →
dima_shapkin (2004-09-14 10:07) [5]CreateFile, ReadFile, WriteFile...
See Windows SDK
← →
icebeerg © (2004-09-14 10:28) [6]>anonymous (14.09.04 09:34) [3]
Нет, ну это издевательство какое-то. Ты вообще хоть книжки то читаеш? Головой думаш? Если до вечера никто не сподобиться кинуть тебе готовый алгоритм так уж и быть сделаю...
← →
kukuikar © (2004-09-14 10:32) [7]//резать
//размер кусков указывается в байтах
function SplitFile(FileName : TFileName; SizeofFiles :Integer): Boolean;
var
i : Word;
fs, sStream: TFileStream;
SplitFileName: String;
begin
fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
for i := 1 to Trunc(fs.Size / SizeofFiles) + 1 do
begin
SplitFileName := ChangeFileExt(FileName, "."+ FormatFloat("000", i));
sStream := TFileStream.Create(SplitFileName, fmCreate or fmShareExclusive);
try
if fs.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
function CombineFiles(FileName, CombinedFileName : TFileName) : Boolean;
var
i: integer;
fs, sStream: TFileStream;
filenameOrg: String;
begin
i := 1;
fs := TFileStream.Create(CombinedFileName, fmCreate or fmShareExclusive);
try
while FileExists(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
← →
Рамиль © (2004-09-14 10:48) [8]icebeerg © (14.09.04 10:28) [6]
Только не надо делать
> var f:file of char;
это будет через одно место.
← →
icebeerg © (2004-09-14 10:50) [9]> kukuikar © (14.09.04 10:32) [7]
Кинул таки anonymous"у функции. А я уже сам начал писать с использование BlockRead и BlockWrite. Но твоего кода хватит.
А склеить файлы вообще тривиально можно коммандой copy... ;)
← →
icebeerg © (2004-09-14 10:53) [10]> Рамиль © (14.09.04 10:48) [8]
Согласен, но это первое, что на ум приходит. Читать и писать файлы посимвольно это... :)
← →
kukuikar © (2004-09-14 11:37) [11]
> А склеить файлы вообще тривиально можно коммандой copy...
> ;)
мона-мона:)
← →
anonymous (2004-09-15 10:19) [12]Спасибосо всем кто откликнулся.
Код kukuikar"а нормольно работает. Ему отдельное спасибо!!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.047 c