Главная страница
    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.047 c
1-1090828848
46_55_41_44
2004-07-26 12:00
2004.08.08
Как сделать чтобы в ListBox.Items были разного цвета?


14-1090192400
K.o.Z
2004-07-19 03:13
2004.08.08
Oxygen Phone Manager for Nokia


1-1090494283
MORA
2004-07-22 15:04
2004.08.08
RXdbComboEdit


3-1089884882
Algol
2004-07-15 13:48
2004.08.08
Неверное число записей в Access


1-1090805019
NumDer32Ok
2004-07-26 05:23
2004.08.08
Base64 алгоритм





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