![]() |
Delphi-Version: 11 Alexandria
TFileCopy error
Hallo,
ein Problem treibt mich hierher, in der Hoffnung Ideen oder Lösungen zu finden. Ich erstelle ein Verzeichnis, ok. Dann werden Dateien hinein kopiert, ok. Ein zweiter Rechner (oder eine zweite Instanz vom Programm) startet die App. Das Verzeichnis mit den vorhandenen Files wird gelöscht, dann neu erstellt, ok. Jetzt sollen neue Dateien hinein kopiert werden - Jetzt wir ein Fehler ausgeworfen - und es wird nichts kopiert. Hier der Code: try IsRecursive := true; if TDirectory.Exists(ExportPfad) then TDirectory.Delete(ExportPfad, IsRecursive); except ErrorMsg('Fehler beim Löschen im Verzeichnispfad!',ArchivPfad+#13+ExportPfad,Modul) ; end; TDirectory.CreateDirectory((ExportPfad)); if ConfirmMsg('Sollen jetzt die '+IntToStr(DataMod.Q_ReExport.RecordCount)+' Dateien exportiert werden?','') = mrYes then begin DataMod.Q_ReExport.First; for I:= 1 to DataMod.Q_ReExport.RecordCount do begin try TFile.Copy(ArchivPfad+IntToStr(DataMod.Q_ReExporti d.Value)+'.pdf',ExportPfad+DataMod.Q_ReExportReNum mer.Value+'.pdf'); except ErrorMsg('Fehler beim Kopieren, Dateiname nicht existent oder Pfad falsch! '+#13+ArchivPfad+IntToStr(DataMod.Q_ReExportid.Val ue)+'.pdf'+#13 +ExportPfad+DataMod.Q_ReExportReNummer.Value+'.pdf '+#13+'Bitte wiederholen.','',Modul); EXIT; end; DataMod.Q_ReExport.next; end; end; end; end; Hat jemand eine Idee woran das liegen könnte? LG Harry |
AW: TFileCopy error
Welcher Fehler wird denn geworfen? Übrigens: schließe Delphi-Code doch bitte in die entsprechenden Tags ein [ delphi]Code[ /delphi] (ohne die Leerzeichen), dann ist er viel besser zu lesen.
|
AW: TFileCopy error
Aus der Online-Hilfe:
Zitat:
Du lieferst leider etwas wenig Infos, daher ist es schwierig eine gute Hilfestellung zu geben. Ich könnte mir aber vorstellen, dass du ForceDirectories statt CreateDirectory nehmen musst, da du das Verzeichnis ja auch rekursiv löscht. |
AW: TFileCopy error
Es würde ja vielleicht schon weiterhelfen, wenn man die Original-Fehlermeldung der Exception ausgibt:
Delphi-Quellcode:
try
MachWas; except on E: Exception do ShowMessage('Uups, ein Fehler: ' + E.Message); end; |
AW: TFileCopy error
So wie es aussieht, kann nicht kopiert werden da das Verzeichnis nicht mehr besteht, ob wohl vor der Kopieraktion das neu erstellt werden soll.
Zuerst wird mit
Delphi-Quellcode:
das Verzeichnis mit allen Dateien gelöscht,
if TDirectory.Exists(ExportPfad) then TDirectory.Delete(ExportPfad, IsRecursive);
danach wird mit
Delphi-Quellcode:
das Verzeichnis wieder erstellt.
TDirectory.CreateDirectory((ExportPfad));
Aber aus irgendwelchen Gründen wird bei der zweiten Instanz der App dieses Verzeichnis ohne Fehlermeldung NICHT erstellt, somit kann die nachfolgende Kopieraktion nicht ausgeführt werden. Auch mit
Delphi-Quellcode:
geht es nicht.
if forcedirectories(ExportPfad) then ....
LG Harry |
AW: TFileCopy error
Das klingt jetzt vielleicht ein wenig blöd, aber bist du mit dem Debugger Schritt für Schritt durchgegangen, hast parallel den Datei-Explorer offen für eine Kontrolle (bei jedem Schritt) und dir jede Variable bei jedem Schritt genau angesehen?
Gegebenenfalls solltest du in einem weiteren Explorer den Inhalt der Variablen dort einsetzen. |
AW: TFileCopy error
Mit dem Explorer habe ich überprüft, das Verzeichnis wird gelöscht.
Mit den Variablen probier ich mal aus. Danke. |
AW: TFileCopy error
Moinsen,
für mich klingt das nach einer Race-Condition: Die erste Instanz kopiert noch, während die die zweite Instanz schon versucht das Verzeichnis zu löschen....Hast du mal versucht die zweite Instanz WESENTLICH später zu starten(wenn die erste fertig kopiert hat)? |
AW: TFileCopy error
@noisy_master: Vielen Dank! Ja, ich denke das könnte es gewesen sein. Wenn man eine Weile wartet, scheint das Problem nicht mehr aufzutreten.
Allerdings kam der Fehler nach 8 maligem Probieren wieder. Aber so oft wird die Funktion ja nicht hintereinander aufgerufen. Trotzdem bin ich nicht ganz zufrieden. Aber ersteinmal muss das so laufen. An alle anderen hier, Danke! LG Harry |
AW: TFileCopy error
Was ich daran nicht verstehe: Diese ganze Datei- oder Verzeichnisoperationen sind doch Funktionen, die den Erfolg zurückmelden. Wenn die Funktion zurückkehrt, dann muss die Operation doch ausgeführt sein? Das Ganze wird doch nicht multithreaded durchgeführt?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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