![]() |
Datei im Verzeichnis geöffnet/gesperrt?
Ich möchte testen, ob Dateien in einem Verzeichnis "nicht" von einem anderen Programm gesperrt sind. (z.B. wegen bearbeitung der Datei).
Der einfachste Weg, wäre das Verzeichnis kurzfristig umzubenennen. Ist eine Datei geöffnet, dann kann ich das Verzeichnis nicht umbenennen. Allerdings finde ich diese Methode nicht sehr elegant. Gibt es eine andere Procedure/Funktion die für so etwas geeignet ist? |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Delphi-Quellcode:
Quelle:
function IsFileInUse(FileName: TFileName): Boolean;
var HFileRes: HFILE; begin Result := False; if not FileExists(FileName) then Exit; HFileRes := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); Result := (HFileRes = INVALID_HANDLE_VALUE); if not Result then CloseHandle(HFileRes); end; procedure TForm1.FormCreate(Sender: TObject); begin if IsFileInUse('./test.csv') then ShowMessage('In Use'); end; ![]() Freundliche Grüsse |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Habe mich vieleicht nicht wirklich wirklich gut ausgedrückt.
Das Verzeichnis hat ggf. mehrere hundert Dateien oder auch Verzeichnisse, in dem Verzeichnis geöffnet sind. Ich wollte es vermeiden, alle Dateien einzeln zu testen. |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Die Frage ist, was du eigentlich machen möchtest, bzw. warum es interessant ist, ob die Datei (oder eine von vielen) gerade verwendet wird oder nicht.
Danach richtet sich dann die Vorgehensweise ... |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Für ein Updateprozess muss ich Daten aus diesem Verzeichnis sichern, Dateien aktualisieren und sonst noch so zwei drei Sachen machen.
Damit brauche ich erst gar nicht anzufangen, wenn in dem Verzeichnis noch irgendetwas geöffnet ist. |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Dann ist es wahrscheinlich trotzdem nicht schlecht versuchen den Order umzubenennen.
Wenn du einzelne Dateien überprüfen müsstest könnte man einfach bei der 1000. Datei einfach wieder die 1. aufmachen und die ganze Prüfung ist für nichts zu gebrauchen ^^ Freundliche Grüsse |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Ich würde die Dateien einfach der Reihe nach auf machen und für jede Datei die nicht zu öffnen ist kriegt der Benutzer einen "Wiederholen / Abbrechen"-Dialog.
Und am Schluss die Dateien natürlich wieder zu machen ;-) |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Und wenn man nun die Datei erst öffnet, nachdem du geprüft hast?
Wenn es unbedingt nötigt ist, dann erstell eine Transaktion. |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Zitat:
Delphi-Quellcode:
,
fmShareExclusive
Delphi-Quellcode:
, ... verwenden? Sonst bringt das nix.
fmShareDenyWrite
Wenn diese Zugriffe alle korrekt gehandhabt werden, dann kannst du auf alle Dateien so einen Zugriff machen mit
Delphi-Quellcode:
und wenn du für alle Dateien diesen Zugriff erhalten hast, dann kannst du mit der Arbeit loslegen. Ansonsten gibts du den Zugriff wieder frei und versuchst es später erneut.
fmShareExclusive
|
AW: Datei im Verzeichnis geöffnet/gesperrt?
Ich kann natürlich nicht sicherstellen, ob die Dateien korrekt gesperrt sind.
Aber erst mal wollte ich auf die schnelle testen, ob noch Dateien geöffnet sind. Das mit dem Verzeichnis umbenennen war nur so eine Idee. Nicht wirklich gut. Dann muss ich wohl doch mal jede Datei testen. Schade. Dachte es gibt eine einfach "schnelle" Möglichkeit. |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Zitat:
|
AW: Datei im Verzeichnis geöffnet/gesperrt?
So. habe es jetzt so programmiert, daß jede Datei geprüft wird. Ging doch schneller als ich dachte. ;-)
Leider kann man nicht prüfen, ob eine EXE-Datei gestartet ist. Aber auch das bekomme ich hin. Danke für euere Antworten. |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Zitat:
Siehe CodeLib, SuFu oder Google :stupid: |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Zitat:
Zitat:
Aber dennoch anscheinend nicht so einfach, wenn die Exe-Datei sich auf einem Server befindet und nicht auf dem lokalen Rechner. Zu dem Thema ist die Sufu nicht so ergiebig. |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Es kommt auch darauf an, was du prüfen willst.
Und bei Extern brauchst du entweder jemanden, der das lokal prüft, oder einen Zugangspunkt der solche einen Status liefert. (in diesem Fall wohl eher Ersteres) |
AW: Datei im Verzeichnis geöffnet/gesperrt?
Zitat:
|
AW: Datei im Verzeichnis geöffnet/gesperrt?
In diesem Fall ist das Umbenennen des Verzeichnisses vor der Aktualisierung doch eine sehr elegante Lösung. 8-)
Wenn das Umbenennen funktioniert hast du gleichzeitig eine Sperre, dass während der Aktualisierung kein anderer User im Netz versucht ein Programm zu starten. |
AW: Datei im Verzeichnis geöffnet/gesperrt?
![]() Dort könnte man die Freigaben auch tennen, aber die offenen Programme knallen dann womöglich, wenn sie danach auf diese Datei zugreifen wollen und im Zielsystem der Teil nicht mehr im Cache liegt. Man kann Dateien auch umbenennen (z.B.
Delphi-Quellcode:
anhängen) und dann die neue Datei an diese Stelle legen.
.del
Auch das knallt natürlich, wenn ein noch geöffnetes Programm auf die neue Datei zugreift und nicht kompatibel damit ist (z.B. bei BPLs). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 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