![]() |
Windows.CopyFile verhält sich verkehrt!
Hallo,
Windows.CopyFile verhält sich verkehrt:
Delphi-Quellcode:
Laut Dokumentation und Erfahrung müsste es eigentlich so sein, dass bei bOverwrite = True eine existierende Zieldatei überschrieben wird und umgekehrt. Gerade das Gegenteil ist aber der Fall:
Windows.CopyFile(PChar(sFileA]), PChar(sFileB), bOverwrite);
Wenn bOverwrite = True wird die existierende Zieldatei nicht überschrieben und die Funktion gibt False zurück! Wenn jedoch bOverwrite = false dann wird die existierende Zieldatei überschrieben und die Funktion gibt True zurück! Müsste es eigentlich nicht genau umgekehrt sein? OS: Vista BDS2006 |
Re: Windows.CopyFile verhält sich verkehrt!
Du verwendest die WinApi-Version bei der hisst der 3. Parameter bFailsIfExists
http://msdn.microsoft.com/en-us/library/aa363851(VS.85).aspx |
Re: Windows.CopyFile verhält sich verkehrt!
Zitat:
Welches CopyFile gibt's denn noch und welches ist empfehlenswerter? |
Re: Windows.CopyFile verhält sich verkehrt!
Ich hab mal diese Liste hier irgendwo gefunden. Kann jemand 'ne Aussage machen, welche Vor- und Nachteile die einzelnen Methoden jeweils haben?
Delphi-Quellcode:
// There are five methods to copy a file, you can chose one to use:
// No 1: Procedure FileCopy( Const sourcefilename, targetfilename: String ); Var S, T: TFileStream; Begin S := TFileStream.Create( sourcefilename, fmOpenRead ); try T := TFileStream.Create( targetfilename, fmOpenWrite or fmCreate ); try T.CopyFrom(S, S.Size ) ; finally T.Free; end; finally S.Free; end; End; // No 2: {This way uses memory blocks for read/write.} procedure FileCopy(const FromFile, ToFile: string); var FromF, ToF: file; NumRead, NumWritten: Word; Buf: array[1..2048] of Char; begin AssignFile(FromF, FromFile); Reset(FromF, 1); { Record size = 1 } AssignFile(ToF, ToFile); { Open output file } Rewrite(ToF, 1); { Record size = 1 } repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten <> NumRead); System.CloseFile(FromF); System.CloseFile(ToF); end; // No 3. {This one uses LZCopy, which USES LZExpand.} procedure CopyFile(FromFileName, ToFileName: string); var FromFile, ToFile: File; begin AssignFile(FromFile, FromFileName); { Assign FromFile to FromFileName } AssignFile(ToFile, ToFileName); { Assign ToFile to ToFileName } Reset(FromFile); { Open file for input } try Rewrite(ToFile); { Create file for output } try { copy the file an if a negative value is returned raise an exception } if LZCopy(TFileRec(FromFile).Handle, TFileRec(ToFile).Handle) < 0 then raise Exception.Create('Error using LZCopy') finally CloseFile(ToFile); { Close ToFile } end; finally CloseFile(FromFile); { Close FromFile } end; end; // No 4: procedure CopyFile(FromFileName, ToFileName: string); var shellinfo: TSHFileOpStructA; Files:String; begin Files:=FromFileName+#0+#0; with shellinfo do begin Wnd:=Self.handle; wFunc:=FO_COPY; pFrom:=PChar(Files); pTo:=PChar(ToFileName); fFlags:=FOF_NOCONFIRMATION or FOF_SILENT; end; SHFileOperation(shellinfo); end; // No 5: copyfile(PChar(FromFileName),PChar(ToFileName),False); |
Re: Windows.CopyFile verhält sich verkehrt!
CopyFileEx fehlt noch.
|
Re: Windows.CopyFile verhält sich verkehrt!
Zitat:
|
Re: Windows.CopyFile verhält sich verkehrt!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz