Главная страница
    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.45 MB
Время: 0.032 c
14-1089924644
Baron
2004-07-16 00:50
2004.08.08
Обсуждение опроса.


11-1078470890
M5
2004-03-05 10:14
2004.08.08
Как сортировать список TList?


4-1088418091
Denis_Visma
2004-06-28 14:21
2004.08.08
Автоклик на форме!!! не кликает!!!!


3-1087717059
тот же
2004-06-20 11:37
2004.08.08
FastReport


4-1088110925
nick_mas
2004-06-25 01:02
2004.08.08
Как скопировать строку в Edit другого приложения?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский