AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Windows.CopyFile verhält sich verkehrt!

Ein Thema von PeterPanino · begonnen am 4. Aug 2008 · letzter Beitrag vom 5. Aug 2008
Antwort Antwort
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#1

Windows.CopyFile verhält sich verkehrt!

  Alt 4. Aug 2008, 20:21
Hallo,

Windows.CopyFile verhält sich verkehrt:

Windows.CopyFile(PChar(sFileA]), PChar(sFileB), bOverwrite); 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:

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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Windows.CopyFile verhält sich verkehrt!

  Alt 4. Aug 2008, 20:24
Du verwendest die WinApi-Version bei der hisst der 3. Parameter bFailsIfExists
http://msdn.microsoft.com/en-us/library/aa363851(VS.85).aspx
Markus Kinzler
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Windows.CopyFile verhält sich verkehrt!

  Alt 4. Aug 2008, 20:36
Zitat von mkinzler:
Du verwendest die WinApi-Version bei der hisst der 3. Parameter bFailsIfExists
http://msdn.microsoft.com/en-us/library/aa363851(VS.85).aspx
Danke!

Welches CopyFile gibt's denn noch und welches ist empfehlenswerter?
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Windows.CopyFile verhält sich verkehrt!

  Alt 4. Aug 2008, 21:12
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);
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Windows.CopyFile verhält sich verkehrt!

  Alt 4. Aug 2008, 21:20
CopyFileEx fehlt noch.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Windows.CopyFile verhält sich verkehrt!

  Alt 4. Aug 2008, 23:14
Zitat von Luckie:
CopyFileEx fehlt noch.
Ist das nicht Numero 4?
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Windows.CopyFile verhält sich verkehrt!

  Alt 5. Aug 2008, 07:08
Nö Nummer vier ist bei mir SHFileOperation.

http://www.michael-puff.de/Developer...opyFileEx.html
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz