Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.028 c
14-1090256794
<DeL.>
2004-07-19 21:06
2004.08.08
Помогите!


3-1089558405
Nurali
2004-07-11 19:06
2004.08.08
Запрос


14-1090675139
VID
2004-07-24 17:18
2004.08.08
Зацените, плиз...


14-1090252945
ims
2004-07-19 20:02
2004.08.08
проверить icq через веб форму.


4-1088510108
NLO
2004-06-29 15:55
2004.08.08
Find_Window





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский