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
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 ?
Probleme beim "säubern" von Windows Systemordnern
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.
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.
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.
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.
Das hab ich mir fast gedacht das Windows das nicht gerne hat wenn ein Fremprogramm (oder sogar der eigene Explorer) in bestimmten Systemdateien rumfuscht
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
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
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.
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
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
Da wird man dir ohne deinen Quellcode wohl nicht weiterhelfen können.
Wenn er etwas länger sein sollte: http://paste.pocoo.org
Wenn er etwas länger sein sollte: http://paste.pocoo.org
Quellcode ist recht kurz
Statt os.remove habe ich auch schon mit win32api.DeleteFile() probiert. Leider wie erwähnt ohne Erfolg.
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 + "'")
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).
Allgemein solltest du dir für solche Operationen mal die im os Modul vorhandenen Funktionen anschauen (z.B. os.abspath und os.path.join).
- 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?
Mit der Gefahr mich (und Pekh) zu wiederholen: Warum denn nicht die Bordmittel nehmen?
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:
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.
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'
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.
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
Hier werden Sie geholfen : http://www.python-forum.de/topic-9245.html
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]
[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]
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:
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'
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'
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'
-
- 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]
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]