![]() |
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?
|
AW: TFileCopy error
Virenscanner und Dergleichen können sich nachfolgen nochmal kurz daran zu schaffen machen. (und die Datei dabei eventuell vorübergehend sperren)
|
AW: TFileCopy error
Naja, er schreibt ja
Zitat:
Ich fände die Auflösung des Rätsels interessant, vielleicht schraubt HCB doch ein kleines Beispielprogramm zusammen? Die Erwähnung "oder von einem anderen Rechner" lässt mich allerdings vermuten, dass es hier um ein Netzlaufwerk geht. |
AW: TFileCopy error
Hallo nochmal,
das Programm wird lokal auf 3 Rechnern ausgeführt und greift im LAN auf ein Verzeichnis eines NAS Laufwerks zu. Dieses Verzeichnis wird gelöscht und danach mit Dateien gefüllt wenn einer der Rechner die "Exportfunktion" ausführt. Soweit so gut. Es kommt aber öfter vor, dass wenn der Export von PC1 ausgeführt wurde, hinterher z.B. von PC2 die "Exportfunktion" einen Zugriffsfehler auswirft. In diesem Fall wurde das Verzeichnis nicht erstellt. Vielleicht liegt es auch am NAS Betreibssystem, wer weiß? LG Harry |
AW: TFileCopy error
Warum exportieren denn alle PC immer in das gleiche Verzeichnis? Sind doch verschiedene PC.
Und warum erstellst du nicht für jeden Export ein neues Verzeichnis? Und behält die alten Exporte für den Fall das bei den neuen was schief geht? Um ein zumüllen des NAS zu verhindern kann jeder PC seine alten Backups ja nach einiger Zeit löschen. |
AW: TFileCopy error
Ich würde das Verzeichnis nicht löschen nur die Dateien im Verzeichnis.
Außerdem solltest Du ein Lock Mechanismus implementieren, so das eine Instanz die Aufgabe immer vollständig abarbeiten kann ohne das eine Andere dazwischenfunkt. |
AW: TFileCopy error
Kommt ein Open-/SaveDialog zum Einsatz?
Das Mistding ändert standardmäßig das Arbeitsverzeichnis auf den gewählten Pfad. Dadurch wird natürlich dieses Verzeichnis gesperrt und ließe sich nicht löschen. Aber egal ... sowas Ähnliches kann auch durch andere Dinge passieren. Im meinem NAS hatte ich mal im SMB versucht Verwaltungs-Dateien des NAS auf Ignorieren zu setzen. Sie waren dann im SMB nicht mehr sichtbar, aber wenn versucht wurde so ein Verzeichnis zu löschen, dann hieß es natürlich, dass dieser Pfad nicht leer sei und Löschen ging nicht (von extern). Im FileBrowser des NAS waren/sind diese Dateien/Verzeichnisse auch nicht sichtbar, aber der hat beim Löschen keine Probleme damit. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 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