![]() |
ThreadProbleme mit DeleteFile
Hallo,
Ich habe folgendes Problem: In einer Multithread-Anwendung, die Dateien ließt, verarbeitet und dann löscht, kommt es öfters vor, daß eigentlich gelöschte Dateien (mit Windows.DeleteFile(sFile) erneut verarbeitet werden. MSDN schreibt dazu: Zitat:
wie oben breschrieben, nicht. Eventuell kann man das mittels Windoes.GetQueuedCompletionStatus herausbekommen, hat dies schon mal jemand eingesetzt bzw. einen anderen Vorschlag? Besten Dank im vorraus. Fuchtel |
Re: ThreadProbleme mit DeleteFile
liefert dir denn DeleteFile True zurück?
|
Re: ThreadProbleme mit DeleteFile
Hallo SirThornberry,
ja, sicherlich aber im Hauptthread, der die anderen anstößt, wird die Datei immer noch gefunden! Gruß Fuchtel |
Re: ThreadProbleme mit DeleteFile
Bist du denn sicher, dass die Datei auch wirklich überall geschlossen wurde?
|
Re: ThreadProbleme mit DeleteFile
Bei mir, das Prog. lauft auf einem Server, ja.
Allerdings werden die Dateien nicht von mir geschrieben. Deshalb brauche ich auch eine verläßliche Abfrage, ob die Datei nun endlich (erfolgreich) gelöscht wurde. Fuchtel |
Re: ThreadProbleme mit DeleteFile
fileexists versucht die Datei per Auflistung zu finden. Und solange sie per DirectoryListing gefunden wird ist sie nunmal noch nicht gelöscht.
|
Re: ThreadProbleme mit DeleteFile
Ich habe jetzt doch eine hinreichend funktionierende Lösung gefunden:
Delphi-Quellcode:
Gleichzeitig wird beim Begin der Verarbeitung der Dateien das A-Flag zurückgesetzt.
function TestFileToUse(const sFile : string ) : boolean;
var hFile : THandle; lpFileInfo : TByHandleFileInformation; begin Result := false; if not FileExists(sFile) then exit; // File existiert nicht hFile := CreateFile(pchar(sFile), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_WRITE_THROUGH, 0); If (hFile = INVALID_HANDLE_VALUE) then Exit; // File in Bearbeitung GetFileInformationByHandle(hFile, lpFileInfo); CloseHandle(hFile); If lpFileInfo.dwFileAttributes and sysutils.faArchive = 0 then Exit; // Kein A-Flag Result := true; end; Gruß Fuchtel |
Re: ThreadProbleme mit DeleteFile
Synchronisiert du den Löschvorgang überhaupt?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 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