AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) CopyFile Datei wird nicht überschrieben

CopyFile Datei wird nicht überschrieben

Ein Thema von Dennis07 · begonnen am 11. Okt 2015 · letzter Beitrag vom 22. Okt 2015
Antwort Antwort
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.653 Beiträge
 
Delphi 12 Athens
 
#1

AW: CopyFile Datei wird nicht überschrieben

  Alt 11. Okt 2015, 19:35
Ändere doch mal die letzte Zeile Copyfile wie unten beschrieben und schaue dir die Strings an. Dann wirst du merken, dass deine Dateinamensangaben nicht passen. Du nimmst gleich den neuen Namen, anstatt den Quellnamen.

Delphi-Quellcode:

var

  s1, s2: String;


....
     s1 := CurrentFolder + '\' + ChangeFileExt(fName,'.txt');
      s2 := NewFolder + ChangeFileExt(fName,'.txt');
      if not CopyFile(PChar(s1), PChar(s2), FailIfExists)then
  ShowMessage('Fehler beim Erstellen der Kopie!'#13#10 + SysErrorMessage(GetLastError));
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
492 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: CopyFile Datei wird nicht überschrieben

  Alt 11. Okt 2015, 19:44
Nein. Hatte aber bereits auch schon gesagt, dass kein Fehler auftritt und die Funktion "True" zurückgibt. Trotzdem wird die Datei nicht überschrieben.
Und die Namen passen soweit. Beim erstmaligen Kopieren (wo die Zieldatei ja noch nicht existiert) passt es ja auch und die Datei wird problemlos kopiert.
Dennis
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.653 Beiträge
 
Delphi 12 Athens
 
#3

AW: CopyFile Datei wird nicht überschrieben

  Alt 11. Okt 2015, 20:03
Und was bringt ShowMessage hinter dem Copyfile?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
492 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: CopyFile Datei wird nicht überschrieben

  Alt 11. Okt 2015, 20:13
Wie ich bereits sagte: Es wird nicht aufgerufen, wenn die Datei noch nicht existiert oder wenn diese überscrhieben werden soll.
Und wenn diese nicht überschrieben werden soll, dann wird ShowMessage aufgerufen und zeigt an, dass die Zieldatei bereits existiert und deswegen nicht Kopiert werden kann.
Also soweit alles im grünen Bereich ohne Auffälligkeiten.
Nur, wird die Datei halt nicht überschrieben, wenn sie das eigentlich sollte.
Dennis
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.653 Beiträge
 
Delphi 12 Athens
 
#5

AW: CopyFile Datei wird nicht überschrieben

  Alt 11. Okt 2015, 20:26
Wenn Copyfile nicht erfolgreich ist, muss ShowMessage aufgerufen werden mit

SysErrorMessage(GetLastError)); Da siehst du, warum das fehlschlug.
Bitte deinen Code entsprechend ändern, wie von mir oben beschrieben und die Meldung posten.

Außerden wird FailIfExists nicht initialisiert. Das sollte auch gemacht werden.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
492 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: CopyFile Datei wird nicht überschrieben

  Alt 11. Okt 2015, 20:56
Wenn Copyfile nicht erfolgreich ist, muss ShowMessage aufgerufen werden
Eben nicht. Das ist ja mein Problem: Es wird nichts überschrieben, obwohl kein Fehler ausgelöst wurde und auch obwohl Copyfile True zurückgibt (also folglich ShowMessage nicht ausgeführt wird).

Außerden wird FailIfExists nicht initialisiert. Das sollte auch gemacht werden.
Nö, wieso? Ist doch egal was drinsteht, solange sichergestellt wurde, dass die Datei nicht existiert...
Dennis

Geändert von Dennis07 (11. Okt 2015 um 20:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: CopyFile Datei wird nicht überschrieben

  Alt 11. Okt 2015, 22:11
Räum deinen Code doch erst mal auf. Speicher den zusammengebastelten Pfad mal in einer Variablen zwischen. Dann guckst du mal, ob da auch das drin steht, was du erwartest.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#8

AW: CopyFile Datei wird nicht überschrieben

  Alt 21. Okt 2015, 19:00
Ohne jetzt alle 26 Antworten gelesen zu haben, meine erste Vermutung wäre dass das FailIfExists der Fehler ist.

Wenn ich mich nicht irre, dann ploppt die MsgBox auf "Möchten sie die datei übschreiben [...] ?" [Yes, No].

Wenn man dort dann Yes auswählt, dann wird true zurückgeliefert, was die Variable FailIfExist auch auf true setzt.

Demnach wird bei CopyFile(,,True) übergeben und somit failed logischreweise das Replace.

Geändert von Lyan (21. Okt 2015 um 19:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: CopyFile Datei wird nicht überschrieben

  Alt 21. Okt 2015, 20:54
Nein, wenn dort Yes ausgewählt wird, dann wird mrYes zurückgeliefert und dann wird FailIfExists := MessageDlg(...) <> mrYes; eben false .
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:48 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