Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   CopyFile Datei wird nicht überschrieben (https://www.delphipraxis.net/186916-copyfile-datei-wird-nicht-ueberschrieben.html)

Dennis07 11. Okt 2015 20:56

AW: CopyFile Datei wird nicht überschrieben
 
Zitat:

Zitat von zeras (Beitrag 1318349)
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).

Zitat:

Zitat von zeras (Beitrag 1318349)
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...

Luckie 11. Okt 2015 22:11

AW: CopyFile Datei wird nicht überschrieben
 
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.

Dalai 12. Okt 2015 01:14

AW: CopyFile Datei wird nicht überschrieben
 
Zitat:

Zitat von Dennis07 (Beitrag 1318339)
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

Dennis07 12. Okt 2015 02:18

AW: CopyFile Datei wird nicht überschrieben
 
Oh, danke, wusst ich gar nicht, das mit dem SHFolderDingsta... werd ich mir mal ansehen, danke.

p80286 12. Okt 2015 11:04

AW: CopyFile Datei wird nicht überschrieben
 
Delphi-Quellcode:
var
  Index: Integer;
  NewFolder: String;
  FailIfExists: Boolean;
begin
  NewFolder := GetEnvironmentVariable('USERPROFILE') + '\Documents\';
  for Index := 0 to ListBox1.Items.Count - 1 do
  begin
    if ListBox1.Selected[Index] = True then
    begin
      if FileExists(NewFolder + ChangeFileExt(ListBox1.Items.Strings[Index],'.txt')) = True then
      begin
        FailIfExists := (MessageDlg('Die Datei "' + ListBox1.Items.Strings[Index] + '" existiert bereits.' + sLineBreak + 'Soll diese überschieben werden?',mtWarning,mbYesNo,0) <> mrYes);
      end;
      CopyFile(PChar(CurrentFolder + '\' + ChangeFileExt(ListBox1.Items.Strings[Index],'.txt')),PChar(NewFolder + ChangeFileExt(ListBox1.Items.Strings[Index],'.txt')),FailIfExists);
    end;
  end;
was passiert den in dem vollkommen unwahrscheinlichen Fall, daß es
Delphi-Quellcode:
NewFolder + ChangeFileExt(ListBox1.Items.Strings[Index],'.txt'
nicht gibt?

Richtig,
Delphi-Quellcode:
 CopyFile
arbeitet mit einem zufälligen Wert der in
Delphi-Quellcode:
FailIfExists
steht.

(woher kommt eigentlich diese unsägliche Unsitte "if irgendwas = True" ? gibt es irgendeinen Java oder BASCIC -Dialekt der das so benötigt?)

Gruß
K-H

Dennis07 12. Okt 2015 16:03

AW: CopyFile Datei wird nicht überschrieben
 
Zitat:

Zitat von p80286 (Beitrag 1318385)
was passiert den in dem vollkommen unwahrscheinlichen Fall, daß es
Delphi-Quellcode:
NewFolder + ChangeFileExt(ListBox1.Items.Strings[Index],'.txt'
nicht gibt?

Kannst du nicht wissen, kann aber nicht passieren. Das hat was damit zu tun, wie ich an die Einträge der Listbox komme. Ich hab hier ja nicht mein gesammtes Programm gepostet.. :D

Zitat:

Zitat von p80286 (Beitrag 1318385)
woher kommt eigentlich diese unsägliche Unsitte "if irgendwas = True" ? gibt es irgendeinen Java oder BASCIC -Dialekt der das so benötigt?

Nicht wirklich, nein. Ist noch ne dumme angewohnheit, die ich aus Assembly übernommen hatte. Mal sehen, vielleicht gewöhn ich mir das wieder ab... :D

hoika 13. Okt 2015 03:14

AW: CopyFile Datei wird nicht überschrieben
 
Hallo,
wie ist der Rückgabewert von CopyFile und GetLastError?

Hier noch mal die Beschreibung:

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx


Heiko

Dennis07 13. Okt 2015 16:38

AW: CopyFile Datei wird nicht überschrieben
 
Hatte ich bereits oben mehrfach gepostet. Egal, ich lösche die Datei jetzt einfach, falls dieses erwünscht ist und dann wird sie komplett neu erstellt beim Kopieren, oder halt nicht. Das klappt problemlos.
Danke trotzdem für eure Hilfe!

MfG

hoika 14. Okt 2015 04:26

AW: CopyFile Datei wird nicht überschrieben
 
Hallo,
es ist trotzdem schade, dass du keine der Hilfen annimmst,
wie z.B. mal lokale Variablen zu benutzen.
FailIfExists ist nicht initialisiert, wenn die Datei nicht existiert.

Mach das ganze doch auch für Dich und uns übersichtlicher und stell den Code noch mal hier rein.

Mit SearchEverything kannst du sehr schnell nach einer Datei suchen,
wer weiß, wo die ist . . .

Heiko

Dennis07 14. Okt 2015 07:34

AW: CopyFile Datei wird nicht überschrieben
 
Denkst du, das habe ich nicht?
Ich war schon bevor ich hier gepostet habe so weit, dass ich wusste, dass es an der CopyFile-Methode selbst liegen muss. Scheinbar irgendwas auf meinem System ist da Fehlerhaft. Die Variablen stimmen und es werden die Methoden und Variablen korrekt konfiguriert. Auch die Lösungswege, die ihr geostet habt (die im grunde identisch sind mit dem, was ich sonst noch so versucht habe) funktionierten nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:59 Uhr.
Seite 2 von 4     12 34      

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