Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.08;
Скачать: CL | DM;

Вниз

Люди дайте совет по функции!   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
8-1085322240
Yokka-56
2004-05-23 18:24
2004.08.08
Гуру Дульфи, подскажите пожалуйста


1-1090428623
Bohdan
2004-07-21 20:50
2004.08.08
Печать вебстраниц в TWebBrowser


14-1090510204
GrayFace
2004-07-22 19:30
2004.08.08
Моя персональная анкета


1-1090645070
DelphiN!
2004-07-24 08:57
2004.08.08
Поиск в реестре


4-1088593773
noname
2004-06-30 15:09
2004.08.08
CreateRemoteThread в Win9X