Arquivos - como fazer um split

Top  Previous  Next

Question/Problem/Abstract:

 

split large size of file into more file 

Answer:

 

var

  FromF, ToF        : File;

  Buf               : array of char;

  NumRead,NumWritten: Integer;

 

function Dosya_Bol:Byte; 

var 

   i    : Integer; 

begin 

  for i := 1 to 700 do 

  begin 

    BlockRead(FromF, Buf, SizeOf(Buf), NumRead); 

    BlockWrite(ToF, Buf, NumRead, NumWritten); 

    Form1.PB.Position := Form1.PB.Position+NumRead; 

    if NumRead = 0 then 

     begin 

       Dosya_Bol := 0

       Break; 

     end

    if NumWritten <> NumRead then 

     begin 

       Dosya_Bol := 1

       Break; 

     end

  end

end

 

procedure TForm1.Button1Click(Sender: TObject); 

var 

  i,boy         : Integer; 

  dad           : String; 

  yer           : Byte; 

begin 

  OD.Filter := 'Tüm Dosyalar|*.*'

  if OD.Execute then 

  begin 

    Label1.Caption:=OD.FileName; 

    PB.Position:=0

    AssignFile(FromF, OD.FileName); 

    Reset(FromF, 1); 

    PB.Max := FileSize(FromF); 

    i := 1

    repeat 

      dad := 'file' + IntToStr(i) + '.blt'

      AssignFile(ToF, dad); 

      Rewrite(ToF, 1); 

      yer := dosya_bol; 

      CloseFile(ToF); 

      i := i + 1

    until  yer = 0

    CloseFile(FromF); 

 

    Memo1.Lines.Clear; 

    Memo1.Lines.Add(OD.FileName); 

    Memo1.Lines.Values['ds'] := IntToStr(i-1); 

    Memo1.Lines.SaveToFile('ballog.blf'); 

  end

end

 

procedure TForm1.Button2Click(Sender: TObject); 

var 

   d_s,i        : Integer; 

   d_a          : String; 

begin 

  OD.Filter := 'Balta dosyalarý|*.blf'

  if OD.Execute then 

  begin 

    Memo1.Lines.LoadFromFile(OD.FileName); 

    d_a := Memo1.Lines[0]; 

    d_s := StrToInt(Memo1.Lines.Values['ds']); 

 

    AssignFile(ToF, d_a); 

    Rewrite(ToF, 1); 

    for i:=1 to d_s do 

    begin 

      AssignFile(FromF, 'file' + IntToStr(i) + '.blt'); 

      Reset(FromF, 1); 

      PB.Position := 0

      PB.Max := FileSize(FromF); 

      repeat 

        BlockRead(FromF, Buf, SizeOf(Buf), NumRead); 

        BlockWrite(ToF, Buf, NumRead, NumWritten); 

        PB.Position := PB.Position + NumRead; 

      until (NumRead = 0or (NumWritten <> NumRead); 

      CloseFile(FromF); 

    end

    CloseFile(ToF); 

  end

end