Kullanılan dosyayı kopyalama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Kullanılan dosyayı kopyalama

Mesaj gönderen tuna »

Merhaba arkadaşlar. 2 sorum var belki bilenleriniz vardır diye fazla araştırma yapamadım buraya sorayım dedim

1. Sorum. delphi ile o anda kullanılan bir dosyayı başka bir yere nasıl kopyalarım (copyfile bir işe yaramıyor)
2. Sorum. Bir dosyayı kopyalarken kopyaladığım yerdeki dosyanın aynısı varsa dosyanın değişip değişmediğine baksın eğer değişmişse kopyalasın.
Yani incremental kopyalama (Backup programlarınınki gibi.)
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Kullanılan dosyayı kopyalama

Mesaj gönderen mkysoft »

kopyalama işlemnini dosyayı binary modda okuma ile açarsanız belki kopyalayabilirsiniz. Eğer o dosyayı açan program yazma modunda açmışsa halilyle windows engeller.
dosyanın değişik değişmediği anlamak için son değişiklik tarhine, boyutuna kolayca bakabilirsiniz. Ancak bu bilgiler %100 değişmediği anlamına gelmez. İşi garantiye almak istiyorsanız dosyaları binary modda okuyarak karşılaştırın.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Kullanılan dosyayı kopyalama

Mesaj gönderen conari »

Kod: Tümünü seç

 procedure CopyFiles(const FromFolder: string; const ToFolder: string);
var
  Fo      : TSHFileOpStruct;
  buffer  : array[0..4096] of char;
  p       : pchar;
begin
  FillChar(Buffer, sizeof(Buffer), #0);
  p := @buffer;
  StrECopy(p, PChar(FromFolder)); //this is folder that you want to copy
  FillChar(Fo, sizeof(Fo), #0);
  Fo.Wnd    := Application.Handle;
  Fo.wFunc  := FO_COPY;
  Fo.pFrom  := @Buffer;
  Fo.pTo    := PChar(ToFolder); //this is where the folder will go
  Fo.fFlags := 0;
  if ((SHFileOperation(Fo) <> 0) or (Fo.fAnyOperationsAborted <> false)) then
    ShowMessage('File copy process cancelled')
end;
karşılaştırmak için;

Kod: Tümünü seç

function GetFileDateTime(FileName: string): TDateTime;
var intFileAge: LongInt;
begin
  intFileAge := FileAge(FileName);
  if intFileAge = -1 then
    Result := 0
  else
    Result := FileDateToDateTime(intFileAge)
end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Kullanılan dosyayı kopyalama

Mesaj gönderen tuna »

procedure CopyFiles(const FromFolder: string; const ToFolder: string);
var
Fo : TSHFileOpStruct;
buffer : array[0..4096] of char;
p : pchar;
begin
FillChar(Buffer, sizeof(Buffer), #0);
p := @buffer;
StrECopy(p, PChar(FromFolder)); //this is folder that you want to copy
FillChar(Fo, sizeof(Fo), #0);
Fo.Wnd := Application.Handle;
Fo.wFunc := FO_COPY;
Fo.pFrom := @Buffer;
Fo.pTo := PChar(ToFolder); //this is where the folder will go
Fo.fFlags := 0;
if ((SHFileOperation(Fo) <> 0) or (Fo.fAnyOperationsAborted <> false)) then
ShowMessage('File copy process cancelled')
end;

Bu kod işe yaramadı. Dosya kullanımda diyerek hata veriyor.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Kullanılan dosyayı kopyalama

Mesaj gönderen vkamadan »

Merhaba ,
Windows kullanımda olan bir dosyanın adını değiştirmeye izin vermez fakat uzantısını değiştirmenize izin verir, bu noktadan yola çıkarak kopyalamak istediğiniz dosyanın uyzantısını geçici olarak değiştirin kopyaladıktan sonra tekrar eski haline getirin, yapmak istediğiniz olay dahil bu yöntemle o an çalışan dosyaların üzerine yazma işlemide yapabilirsiniz örn: çalışan programın kendi kendini güncellemesi gibi..
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Kullanılan dosyayı kopyalama

Mesaj gönderen conari »

tuna yazdı: Bu kod işe yaramadı. Dosya kullanımda diyerek hata veriyor.
Ben bu kod ile kopyalamıştım. Fark şu olabilir klasör göstererek kopyalıyordum.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla