CopyFile ve ProgressBar

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
sertkayasalih
Üye
Mesajlar: 178
Kayıt: 12 Haz 2003 12:47
Konum: Antalya
İletişim:

Mesaj gönderen sertkayasalih »

Merhaba delphi_coder,

- Problemini FileStream ile çözmene sevindim.

- Bir öneri, eğer zamanın müsait olursa FileStream ile nasıl çözdüğünü kodlarla foruma yansıtırsan ben ve diğer ihtiyacı olanlar da öğrenebiliriz.
Bilgi; iki tarafı keskin kılıca benzer.
İyi kullanılmazsa, ya karşıyı, ya da sahibini
keser.
Misafir

Mesaj gönderen Misafir »

merhaba.
tabii ki paylaşırım, buyrun..

Kod: Tümünü seç

Procedure TMain.FileCopy(Const SourceFileName, TargetFileName: String; Progress : Tprogressbar);
Var
 SFile, TFile: TFileStream;
 F_File: file;
Begin
 SFile := TFileStream.Create(Sourcefilename, fmOpenRead);
 progress.Max := SFile.Size;
try
 TFile := TFileStream.Create(targetfilename,fmOpenWrite or fmCreate);
try
 TFile.CopyFrom(SFile, SFile.Size ) ;
 progress.Position := SFile.Position;
finally
 TFile.Free;
end;
finally
 SFile.Free;
end;
progress.Position := 0;
End;
kolay gelsin.
Kullanıcı avatarı
sertkayasalih
Üye
Mesajlar: 178
Kayıt: 12 Haz 2003 12:47
Konum: Antalya
İletişim:

Mesaj gönderen sertkayasalih »

@delphi_coder,

- Bilgi paylaşma nezaketin için teşekkür ederim :)
Bilgi; iki tarafı keskin kılıca benzer.
İyi kullanılmazsa, ya karşıyı, ya da sahibini
keser.
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

Mesaj gönderen vampir261 »

Bugün bu koda ihtiyacım oldu ve kullandım çok güzeldi ve çalışıyordu. katkıda bulunan tüm arkadaşlara teşekkür ederim hakkınızı helal edin. özellikle @mrmcop e çok teşekkür ederim. Paylaşmak ne güzel.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

Kod: Tümünü seç

type
  TCallBack = procedure(Position, Size: Longint); { export; }

procedure FastFileCopy(const InFileName, OutFileName: string;
  CallBack: TCallBack);


implementation

procedure FastFileCopyCallBack(Position, Size: Longint);
begin
  Form1.ProgressBar1.Max := Size;
  Form1.ProgressBar1.Position := Position;
end;

procedure FastFileCopy(const InFileName, OutFileName: string;
  CallBack: TCallBack);
const
  BufSize = 3 * 4 * 4096; { 48Kbytes gives me the best results }
type
  PBuffer = ^TBuffer;
  TBuffer = array[1..BufSize] of Byte;
var
  Size: DWORD;
  Buffer: PBuffer;
  infile, outfile: file;
  SizeDone, SizeFile: LongInt;
begin
  if (InFileName <> OutFileName) then
  begin
    buffer := nil;
    Assign(infile, InFileName);
    Reset(infile, 1);
    try
      SizeFile := FileSize(infile);
      Assign(outfile, OutFileName);
      Rewrite(outfile, 1);
      try
        SizeDone := 0;
        New(Buffer);
        repeat
          BlockRead(infile, Buffer^, BufSize, Size);
          Inc(SizeDone, Size);
          CallBack(SizeDone, SizeFile);
          BlockWrite(outfile, Buffer^, Size)
        until Size < BufSize;
        FileSetDate(TFileRec(outfile).Handle,
        FileGetDate(TFileRec(infile).Handle));
      finally
        if Buffer <> nil then
          Dispose(Buffer);
        CloseFile(outfile)
      end;
    finally
      CloseFile(infile);
    end;
  end
  else
    raise EInOutError.Create('File cannot be copied onto itself')
end;
Kullanılışı

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  FastFileCopy('c:\kaynak.dosya', 'c:\Hedef.dosya', @FastFileCopyCallBack);
end;
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Cevapla