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.
ThinkPad
User
Beiträge: 8
Registriert: Freitag 28. November 2008, 21:59

Montag 6. April 2009, 19:58

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
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Montag 6. April 2009, 20:09

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

Montag 6. April 2009, 20:12

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

Montag 6. April 2009, 20:20

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

Montag 6. April 2009, 20:25

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

Montag 6. April 2009, 20:37

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

Montag 6. April 2009, 20:55

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

Montag 6. April 2009, 21:03

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

Montag 6. April 2009, 21:10

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

Montag 6. April 2009, 22:16

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
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Montag 6. April 2009, 22:35

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: 2480
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Montag 6. April 2009, 23:02

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

Montag 6. April 2009, 23:02

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

Dienstag 7. April 2009, 08:12

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

Dienstag 7. April 2009, 08:17

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]
Antworten