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, 18:46
Ich kann zwar im Moment nicht testen, aber solche Konstrukte wie

if ListBox1.Selected[Index] = True then kommen nicht immer gut.
Nimm einfach

if ListBox1.Selected[Index]then bei allen boolschen Vergleichen.
Das kommt bei dir öfters vor.

Auch sollte man, wenn man eine Variable mehrmals verwendet, diese erst einmal zwischenspeichern. Das erhöht die Übersicht.
Beispielsweise kommt
ListBox1.Items.Strings[Index] öfters vor.
Nimm eine lokale Variable, bsp.
Filename := ListBox1.Items.Strings[Index] und ersetze die weiteren Abfragen dann immer mit Filename.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain

Geändert von zeras (11. Okt 2015 um 18:49 Uhr)
  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, 18:58
Ja, grundsätzlich ist das aber egal.
Außerdem habe ich bereits überprüft, "FailIfExists" ist/wird korrekt gesetzt. Daran liegt es nicht. Die "CopyFile"-Methode ansich scheint Probleme zu machen.
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, 19:00
Ja, grundsätzlich ist das aber egal.
Da wirst du im Forum etliche Einträge finden, dass es NICHT egal ist!
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, 19:18
Ich meinte damit nicht, dass es "komplett egal" sei, sondern dass es für dieses Szenario keinen Unterschied macht. Und das stimmt auch. Das ganze hat afaik nur eine auswirkung auf manche API-Sachen wegen der BOOL-Boolean-Inkompatibilität. Bei nativer VCL ist das aber soweit ich weiß sowieso irrelevant. Und wenn man die Vergleiche mit True weglässt, kommt man ja auch aufs selbe Ergebnis. Nähmlich, dass CopyFile nicht überschreibt.
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, 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
 
#6

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
 
#7

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
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#8

AW: CopyFile Datei wird nicht überschrieben

  Alt 12. Okt 2015, 01:14
Das ganze hat afaik nur eine auswirkung auf manche API-Sachen wegen der BOOL-Boolean-Inkompatibilität.
Äh, ja genau darum geht's ja hier. CopyFile will einen BOOL und eben keinen Boolean. Ich wage einfach mal zu behaupten, dass das die Ursache für das Nicht-Überschreiben ist.

Übrigens empfehle ich, die Funktion Format() zu benutzen, um Pfade zusammenzusetzen, denn solche String-Zusammensetzungs-Orgien sind überaus unübersichtlich. Weiterhin empfehle ich, davon Abstand zu nehmen, Standardpfade aus Umgebungsvariablen zu ermitteln, denn dafür gibt es passende Funktionen (SHGetSpecialFolderPath und wie sie alle heißen); das schließt auch das bei dir hartcodierte Verzeichis "Documents" mit ein.

MfG Dalai
  Mit Zitat antworten Zitat
Dennis07

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

AW: CopyFile Datei wird nicht überschrieben

  Alt 12. Okt 2015, 02:18
Oh, danke, wusst ich gar nicht, das mit dem SHFolderDingsta... werd ich mir mal ansehen, danke.
Dennis
  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:57 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