2012-04-01 9 views
1

Ich versuche, einen Detektor zu schreiben, der prüft, ob ein bestimmtes Verzeichnis mit sheltil.rmtree gelöscht werden kann. Ich habe einen Teilcode fertiggestellt wie unten, der jetzt teilweise funktioniert.Python: Verzeichnis, das in Windows 7 nicht erkannt werden kann

Dieser Code kann jetzt warnen, wenn alle .exe-Dateien unter dem Zielordner noch ausgeführt werden. Aber dieser Code kann Warnungen noch nicht kennzeichnen, wenn eine bestimmte Datei in einem Ordner von einem Editor geöffnet wird (was ein weiterer Grund ist, der ein Verzeichnis nicht löschbar macht). Jede Anleitung wird geschätzt. Vielen Dank im Voraus

Hinweis: Ich habe die offene Methode verwendet, um nach gesperrten Dateien zu suchen.

def list_locked_files(dir): 

    isLocked = False 
    for name in os.listdir(dir): 
     uni_name = unicode(name) 
     fullname = dir + u'/' + uni_name 

     if os.path.isdir(fullname): 
      list_locked_files(fullname) 
     else: 
      try: 
       f = open(fullname, 'r+') 
       f.close() 
      except IOError: 
       print fullname + u' is locked!' 
       isLocked = True 
    if isLocked is True: 
     print u'Please close the files/dir above !' 
     sys.exit(0) 
+0

Sie sollten einfach die Systemdatei löschen, dann überprüfen Sie, ob die Datei noch da ist. (Das ist ein Witz, tue das nicht wirklich :)) –

+0

Meinst du "löschen" (beides mal) anstatt "erkennen" im Fragetitel? –

+0

Wenn ich Ihre Frage richtig verstehe, ist das erste Mal zu erkennen (das ist die Frage, die ich eine Antwort finden möchte). Dann ist das zweite Mal zu löschen (das habe ich schon gelöst – Daniel

Antwort

2

Es ist nicht unbedingt möglich, zu bestimmen, ob eine Datei Löschen erfolgreich sein wird oder unter Windows fehlschlagen. Die Datei könnte in einem vollständig freigegebenen Freigabe-Modus geöffnet werden, was bedeutet, dass ein weiterer Versuch, die Datei zu öffnen, erfolgreich sein wird (egal, welche Art von Zugriff Sie anfordern).

Die einzige Möglichkeit festzustellen, ob eine Datei gelöscht werden kann, ist tatsächlich versuchen Sie es.

Auch wenn es eine genaue Art vorher zu sagen gab, sobald Sie die Informationen erhalten, ist es sofort veraltet. Wenn Sie beispielsweise list_locked_files aufrufen, könnte ein Programm eine andere Datei in diesem Verzeichnis öffnen, die dazu führen würde, dass rmtree() fehlschlägt.

Verwandte Themen