Entwickler-Ecke

Dateizugriff - Deiteizugriff nach CopyFile


Delete - Sa 24.07.04 13:28
Titel: Deiteizugriff nach CopyFile
Hi!
Kurze Fräge: Wenn ich eine datei mit Copyfile bewege, dann bleibt sie irgendwie immer noch bis zum Beenden meines Programmes gesperrt, kann also von außen nicht gelöscht werden (->"Datei wird von einem anderen Benutzer/Programm verwendet").
Kann ich Windows irgendwie verständlich machen, dass ich die Datei wirklich nur kopieren wollte und jetzt nichts mehr damit zu tun haben will?


Delete - Sa 24.07.04 14:00

Rein pauschal würde ich tippen, dass du die Datei nicht geschlossen hast. Nachdem du dies mit

Delphi-Quelltext
1:
CloseFile(DeineDatei);                    

getan hast, solltest du sie in Windows wieder normal verwenden können.


Delete - Sa 24.07.04 14:17

CloseFile ist ja für die Verwendung mit Dateivariablen gedacht.
Copyfile ist aber ein API-Befehlfunction CopyFile(lpExistingFileName, lpNewFileName: PChar; bFailIfExists: BOOL): BOOL;der direkt zwei Pfade als Parameter nimmt. Eine File-Variable oder ein Handle zum Schließen habe ich ja dadurch gar nicht erst.


BenBE - So 25.07.04 05:09

Dann mach's doch einfach mit Streams:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure CopyFile(Src, Dest:String);
var
  SourceFile, DestFile:TFileStream;
begin
  DestFile := TFileStream.Create(Dest, fmCreate);
  try
    SourceFile := TFileStream.Create(Src, fmOpenRead or fmShareDenyWrite);
    try
      DestFile.CopyFrom(SourceFile, 0);
    finally
      SourceFile.Free;
    end;
  finally
    DestFile.Free;
  end;
end;


Wenn du eine Function brauchst, einfach ne Try-Except rund rum und im Except-Teil Result auf False, ansonsten als letzt Anweisung vor dem except auf True setzen.