hi
ich würde überprüfen, ob eine datei geöffnet ist oder nicht, damit ich entweder sagen kann,
"Bitte vorher Datei schließen" oder alles ok, Änderungen können abgespeichert werden.
Prüfen, ob man eine Datei speichern kann
Solltest du nicht machen. Selbst wenn du es koenntest - das kann sich in dem Moment zwischen testen, und dann schreiben, geaendert haben. Darum musst du eh immer den Fehler abfangen wenn es nicht geklappt hat, und das ist auch das Signal auf das du hoeren kannst um dem User zu sagen "bitte sicherstellen, dass es geht".
also einfach try?
Allerdings möchte ich gern vor programmstart fragen, ob die noch geöffnet ist, damit
das script nicht ganz durchlaufen werden muß, um dann festzustellen SCHEISSE
Code: Alles auswählen
try:
writer.save()
except:
print("Bitte die Datei schließen.")
das script nicht ganz durchlaufen werden muß, um dann festzustellen SCHEISSE
Niemals nackte except benutzen. Exceptions immer spezifisch abfangen. Und wie willst du denn *vor* Programmstart abfragen, ob es geht? Dann laeuft doch kein Code, bevor dein Programm laeuft
Und wie gesagt, es BRINGT nix, vorher zu pruefen, ob das schon geoeffnet ist. In dem Moment, wo du es wirklich probierst, kann es trotz vorheriger Pruefung passiert sein, das es geoeffnet wurde. zB weil der Windows Virenscanner darueber laeuft, nachdem das Programm das die Datei vorher geoeffnet hatte beendet wurde. Das ist also keine verlaessliche Aussage. Alles was funktioniert ist, es wirklich zu probieren, und dann bei fehlschlagen es einfach nochmal zu probieren. Ggf. eben mit einer Dialogbox die sagt "bitte Datei schliessen in Programmen, die sie benutzen koennten". Aber eine Garantie das das Erfolg hat gibt's eben nicht. Unser Code fuer Windows in der Anwendung die wir vertreiben probiert auch x-mal eine Datei zu loeschen, mit kurzer Pause dazwischen. Weil das unter Windows nicht anders geht.
Und wie gesagt, es BRINGT nix, vorher zu pruefen, ob das schon geoeffnet ist. In dem Moment, wo du es wirklich probierst, kann es trotz vorheriger Pruefung passiert sein, das es geoeffnet wurde. zB weil der Windows Virenscanner darueber laeuft, nachdem das Programm das die Datei vorher geoeffnet hatte beendet wurde. Das ist also keine verlaessliche Aussage. Alles was funktioniert ist, es wirklich zu probieren, und dann bei fehlschlagen es einfach nochmal zu probieren. Ggf. eben mit einer Dialogbox die sagt "bitte Datei schliessen in Programmen, die sie benutzen koennten". Aber eine Garantie das das Erfolg hat gibt's eben nicht. Unser Code fuer Windows in der Anwendung die wir vertreiben probiert auch x-mal eine Datei zu loeschen, mit kurzer Pause dazwischen. Weil das unter Windows nicht anders geht.
- DeaD_EyE
- User
- Beiträge: 1012
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Fast genau so:
Als Mode müsste auch a ausreichen, w+ würde die Datei abschneiden, falls das Öffnen geklappt hat.
Wenn du wissen willst, welche Excpetion genau geworfen wird:
Wenn du dann genau weißt welche Exception das ist, kannst du spezifisch danach abfangen.
Die Funktion sollte z.B. eine Exception werfen, wenn die Datei nicht existiert.
Du willst ja nur prüfen ob die Datei bereits geöffnet ist und für den Schreibzugriff gesperrt worden ist.
Code: Alles auswählen
def is_locked(file):
try:
with open(file, 'r+b'):
return False
except:
return True
Als Mode müsste auch a ausreichen, w+ würde die Datei abschneiden, falls das Öffnen geklappt hat.
Wenn du wissen willst, welche Excpetion genau geworfen wird:
Code: Alles auswählen
def is_locked(file):
try:
with open(file, 'r+b'):
return False
except Exception as e:
print('Error:', e, 'Type':, type(e))
return True
Wenn du dann genau weißt welche Exception das ist, kannst du spezifisch danach abfangen.
Die Funktion sollte z.B. eine Exception werfen, wenn die Datei nicht existiert.
Du willst ja nur prüfen ob die Datei bereits geöffnet ist und für den Schreibzugriff gesperrt worden ist.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
@DeaD_EyE: und neben dem, was __deets__ bereits geschrieben hat, kann es sein, dass nur Teile der Datei gelockt sind und daher das einfache Öffnen keinen Fehler wirft.
@DMD-OS: was sind denn die genauen Fälle, die Du abprüfen willst. Also, aus welchem Grund könnte die Datei bereits geöffnet sein und welche Varianten gibt es, wie man darauf reagieren könnte?
@DMD-OS: was sind denn die genauen Fälle, die Du abprüfen willst. Also, aus welchem Grund könnte die Datei bereits geöffnet sein und welche Varianten gibt es, wie man darauf reagieren könnte?
- __blackjack__
- User
- Beiträge: 13004
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Hier ist die Doku für LockFile: https://docs.microsoft.com/en-us/window ... i-lockfile
Signatur:
Das man die beiden 64-Bit-Werte für Offset und Byteanzahl als vier 32-Bit-Werte angeben muss ist, äh, interessant.
Signatur:
Code: Alles auswählen
BOOL LockFile(
HANDLE hFile,
DWORD dwFileOffsetLow,
DWORD dwFileOffsetHigh,
DWORD nNumberOfBytesToLockLow,
DWORD nNumberOfBytesToLockHigh
);
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis