Probleme beim "säubern" von Windows Systemordnern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ThinkPad
User
Beiträge: 8
Registriert: Freitag 28. November 2008, 21:59

Nabend,

ich bin derzeit dabei mir ein kleines Script zu schreiben das mir den Windows Temp Ordner sowie den Temporary Internet Files Ordner aufräumt, sprich alle Dateien und Ordner die sich in diesen befinden löscht.

Dazu gehe ich mit der os.walk Methode alle Unterordner und Dateien durch.
Dies klappt bei anderen von mit erstellten Ordnern auch wunderbar, allerdings nicht bei den beiden Systemordnern von denen ich oben sprach.

Im Temp Ordner werden zwar Dateien gelöscht allerdings befinden sich dort immer noch welche die ich über den Explorer per Hand löschen kann.

Beim Temporary Internet Files Ordner werde hingegen gar keine Dateien gelöscht :roll:

Getestet habe ich dies unter Windows XP Pro.
Kann mir jemand sagen was es zu beachten gibt um auch wirklich jede Datei löschen zu können die ich auch im Windows Explorer per Hand löschen kann ?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich hab Windows zwar seit Ewigkeiten nicht mehr benutzt, aber kann es das nicht von Haus aus?
ThinkPad
User
Beiträge: 8
Registriert: Freitag 28. November 2008, 21:59

Für den Temp Ordner gibt es soweit ich weiss keine Windows eigene Funktion die das für einen erledigt.
Den Temporary Internet Files Ordner kann man im Menü des Internet Explorer's leeren.

Aber ich möchte mir ein kleines Tool schreiben das diese ganzen Aufgaben für mich erledigt, ohne das ich alles per Hand machen muss.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Schau mal unter Zubehör - Systemprogramme - Datenträgerbereinigung. Da findest du ein entsprechendes Programm.

Das dein Programm nicht ganz so funktioniert wie du es erwartest, liegt vermutlich an Problemen mit den Zugriffsrechten. Nicht immer ist es aus betriebssystemsicht wünschenswert, wenn ein Benutzer einfach irgendwelche Dateien löschen kann. Insbesondere dann nicht, wenn sich diese in Benutzung durch andere Programme (und wenn es nur der Windows-Explorer ist) befinden.
ThinkPad
User
Beiträge: 8
Registriert: Freitag 28. November 2008, 21:59

Das hab ich mir fast gedacht das Windows das nicht gerne hat wenn ein Fremprogramm (oder sogar der eigene Explorer) in bestimmten Systemdateien rumfuscht :lol:

Gibt es denn eine Möglichkeit trotzdem Dateien in diesen Ordnern zu löschen etc. ?

Es gibt ja schließlich auch Programme die dies für einen erledigen. Bspw. www.ccleaner.de
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Gibt es bestimmt, aber da muß ich leider passen. Ich nutze Windows nur sehr selten und verwende dann zum Aufräumen die Bordmittel (siehe obiger Beitrag). Wenn es mit den Tools aus den Modulen os und shutil wirklich nicht gehen sollte (merke: du kannst nicht löschen, was in Benutzung ist, und in der Regel auch keine Ordner, die nicht leer sind), dann könnte der Weg über das Modul win32com und die Systemschnittstelle führen.
ThinkPad
User
Beiträge: 8
Registriert: Freitag 28. November 2008, 21:59

Also über die win32api.DeleteFile() Methode bekomm ich die Meldung:
error: (5, 'DeleteFile', 'Zugriff verweigert')
zurück.

Beim Temporary Internet Files Ordner:
error: (2, 'DeleteFile', 'Das System kann die angegebene Datei nicht finden.')
Die Datei kann aber komischerweise mit dem Exporer sehen.

Ist schon sehr eigenartig :shock:
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Da wird man dir ohne deinen Quellcode wohl nicht weiterhelfen können.

Wenn er etwas länger sein sollte: http://paste.pocoo.org
ThinkPad
User
Beiträge: 8
Registriert: Freitag 28. November 2008, 21:59

Quellcode ist recht kurz ;)

Code: Alles auswählen

            # Dateien löschen            
            for directory in os.walk(path, False):   #False -> durchlaufe die Ordner rueckwaerts
                current_dir = directory[0]
                dir_files = directory[2]
                
                for file in dir_files:
                    try:
                        os.remove(current_dir + "\\" + file)
                    except:
                        self.__runtimelog.WriteLogFile(3, "Can't delete '" + current_dir + "\\" + file + "'")
Statt os.remove habe ich auch schon mit win32api.DeleteFile() probiert. Leider wie erwähnt ohne Erfolg.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Lass dir mal mittels 'print' die Pfade ausgeben, die du da zusammenstückelst. Ich vermute, daß es daran liegt, daß diese schlicht falsch bzw. vom wirklichen Arbeitsverzeichnis aus nicht erreichbar sind. Versuche, wenn immer möglich, absolute Pfade zu verwenden.

Allgemein solltest du dir für solche Operationen mal die im os Modul vorhandenen Funktionen anschauen (z.B. os.abspath und os.path.join).
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Auch solltest du String Formatting statt deinem zusammenstöpseln nutzen und das built-in `file` in Ruhe lassen ;)

Mit der Gefahr mich (und Pekh) zu wiederholen: Warum denn nicht die Bordmittel nehmen?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

cofi hat geschrieben:Auch solltest du String Formatting statt deinem zusammenstöpseln nutzen und das built-in `file` in Ruhe lassen ;)
String formatting :shock: Also für die Pfade sollte man schon os.path.join nutzen.
ThinkPad
User
Beiträge: 8
Registriert: Freitag 28. November 2008, 21:59

Die Pfade der Ordner oder Dateien die nicht gelöscht wurden werden bei mir in eine Logdatei geschrieben. Und die Pfade dort sind absolute Pfade und die Dateien gibt es auch ;)

Meine Log sieht z.b so aus:

Code: Alles auswählen

[06/04/09 22:07:43] ERROR: Can't delete 'E:\TEMP\Cleaning.p-rev75.svn001.tmp.py'
[06/04/09 22:07:43] ERROR: Can't delete 'E:\TEMP\Cleaning.py-rev74.svn000.tmp.py'
[06/04/09 22:07:43] ERROR: Can't delete 'E:\TEMP\Cleaning.py-rev75.svn000.tmp.py'
[06/04/09 22:07:43] ERROR: Can't delete 'E:\TEMP\Cleaning.py-rev76.svn000.tmp.py'
[06/04/09 22:07:43] ERROR: Can't delete 'E:\TEMP\Cleaning.py-rev78.svn000.tmp.py'
[06/04/09 22:07:43] ERROR: Can't delete 'E:\TEMP\etilqs_KWCg2g0VcQzkH99g06B0'
[06/04/09 22:07:43] ERROR: Can't delete 'E:\TEMP\Log.py-rev68.svn000.tmp.py'
[06/04/09 22:07:43] ERROR: Can't delete 'E:\TEMP\Log.py-rev77.svn000.tmp.py'
[06/04/09 22:07:43] ERROR: Can't delete 'E:\TEMP\MainFrameTest.py-revHEAD.svn000.tmp.py'
[06/04/09 22:07:43] ERROR: Can't delete 'E:\TEMP\Perflib_Perfdata_4a8.dat'
[06/04/09 22:07:43] ERROR: Can't delete 'E:\TEMP\Perflib_Perfdata_63c.dat'
Das sind genau die Pfade die dort os.remove übergeben werden. Mit anderen Datein und Ordnern die ich selbst erstellt habe gehts ja auch.
Im Temp Ordner werden auch einige Dateien/Ordner gelöscht so wie es sien soll, aber eben nicht alle.
Das man nicht alles aus dem Temp Ordner löschen kann ist mir auch klar, da ja einiges von Programmen derzeit verwendet wird.
Die die überbleiben kann ich aber "per Hand" löschen komischerweise, deswegen wundert es mich das es nicht mit dieser Funktion klappt..

Das ganze ist übrigens in einer Funktion der man den Pfad des Ordners übergibt in dem die Dateien und Ordner gelöscht werden sollen.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

tja, jetzt lässt du dir vllt. noch den Fehler ausgeben, warum du nicht löschen kannst...

Code: Alles auswählen

try:
    ....
except Exception, err:
    print err
Benutzeravatar
draci
User
Beiträge: 53
Registriert: Dienstag 26. September 2006, 18:13

Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect. - Linus Torvalds

[url]http://groups.google.com/group/pt.comp.so.linux/msg/9eb7db59e32fe08a[/url]

[url=http://www.tty1.net/smart-questions_de.html]Wie man richtig Fragen stellt[/url]
ThinkPad
User
Beiträge: 8
Registriert: Freitag 28. November 2008, 21:59

Laut Exception werden die Dateien die im Temp sind derzeit von einem anderen Prozess derzeit verwendet. Dies scheint auch zu stimmen a ich die auch nicht per Hand löschen kann.
Warum ich in den letzten Tagen trotzdem welche so lösche konnte weiss ich nicht... naja.

Was den Temporary Internet Files Ordner angeht:

Code: Alles auswählen

[Error 32] Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen 
Prozess verwendet wird: u'C:\\Dokumente und Einstellungen\\Admin\\Lokale Einstellungen\\Temporary Internet Files\\Content.IE5\\index.dat'
[Error 145] Das Verzeichnis ist nicht leer: 'C:\\Dokumente und Einstellungen\\Admin\\Lokale Einstellungen\\Temporary Internet Files\\Content.IE5'
Das scheint so auch richtig zu sein. Und in dieser index.dat scheinen alle Dateien zu stehen die der IE Temporär verwendet.

Wenn diese Dateien nicht an einem anderen Ort gespeichert sind, glaube ich gibt es wohl keine Möglichkeit diese zu löschen...


EDIT:

Sehe gerade das dort wieder Dateien im TEMP sind die ich per Hand löschen kann aber das Prog gibt mir folgende Dehlermeldung zurück:

[Error 5] Zugriff verweigert: 'E:\\TEMP\\Log.py-rev79.svn000.tmp.py'
Lightspeed
User
Beiträge: 1
Registriert: Freitag 17. April 2009, 10:04

Warum versuchst Du nicht den einfachen Weg:
f=open("c:\\...Filepath","w")
f.close

Damit habe ich gesperrte Dateien zumindest leeren können. Vielleicht kannst Du sie ja im Anschluss entfernen.[/code]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

``close`` sollte man auch ggf. aufrufen, wenn man es schon hinschreibt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten