Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
ВнизЛюди дайте совет по функции! Найти похожие ветки
← →
SniZ © (2004-07-27 22:00) [0]Короче вот я надыбал в нете функцию, которая режет файл на части, допустим по 100 кил, и немного намодил,
вопрос: помогите мне сделать , дополнить к этой функции опцию вырезания нужного сегмента, и сохранять его в файл, например 5-гоfunction SplitFile(
FileName : TFileName; {файл}
SizeofFiles : Integer; {делим файл на сегменты по стокато байт ну например 100}
Progress,packet,way : integer {вот это надо! прогресс это типа процентов, а пакет номер сегмента, который я хочу достать, way - 1 поделить файл на сколько можно по сегментам (100 к например), а 2 - ну вырезать мне сегмент
) : Boolean; export; stdcall;
var
i : Word;
fs, sStream: TFileStream;
SplitFileName: String;
begin
Progress := 0;
fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
if way=1 then begin
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);
Progress := Round((fs.Position / fs.Size) * 100);
finally
sStream.Free;
end;
end;
end;
if way=2 then begin
{Нужно реализовать}
end;
finally
fs.Free;
end;
end;
← →
Piter © (2004-07-28 00:58) [1]никто за тебя программу писать не будет. В чем вопрос? В чем сложность? Покажи, что ты сам хоть пытался разобраться.
← →
zlo_inside (2004-07-28 08:02) [2]кусок вырезается так: начало куска SizeOfFiles*(packet-1), конец куска SizeOfFiles*packet . Код напишешь сам, нет здесь ничего сложного.
← →
Fay © (2004-07-28 08:44) [3]Ужасно. Если освобожусь (мозгой) - покажу, как это делается (можно сделать). Потом 8)
← →
Fay © (2004-07-28 09:06) [4]Не очень элегантно, но :
1) Конь дарёный 8)
2) Под большие части не затачивал. А мог бы 8)procedure FYVM(SourceFile, TargetPath : string; PartSize : Cardinal);
var
hr, hw, nr, nw, i : Cardinal;
Buf : PChar;
label
BuBuBu;
begin
GetMem(Buf, PartSize);
hr := CreateFile(PChar(SourceFile), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
if hr = INVALID_HANDLE_VALUE then RaiseLastOSError;
i := 0;
hw := INVALID_HANDLE_VALUE;
try
goto BuBuBu;
repeat
Inc(i);
hw := CreateFile(PChar(TargetPath + ExtractFileName(SourceFile) + Format(".%3.3d", [i])), GENERIC_WRITE, 0, nil, CREATE_NEW, 0, 0);
if hw = INVALID_HANDLE_VALUE then RaiseLastOSError;
WriteFile(hw, Buf^, nr, nw, nil);
CloseHandle(hw);
hw := INVALID_HANDLE_VALUE;
BuBuBu :
ReadFile(hr, Buf^, PartSize, nr, nil);
until nr = 0;
finally
if hw <> INVALID_HANDLE_VALUE then CloseHandle(hw);
CloseHandle(hr);
FreeMem(Buf);
end;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.047 c