![]() |
AW: Wie gehe ich mit meinen temporären Daten um?
1/2 OT: Sehr löbliches Vorhaben, daß viel zu wenig Nachahmer findet. Ich hatte neulich 4GB an temporären Dateien und Ordnern aus meinem ein Jahr altem System gelöscht, da meine Programme sowas nicht verwenden, weiss ich daß das Müll von den paar anderen Programmen sein muss, die sonst noch auf meinem Rechner werkeln.
Sherlock |
AW: Wie gehe ich mit meinen temporären Daten um?
Löblich finde ich das auch, aber ...
War das nicht genau der Sinn des Temp-Ordners, das er von Zeit zu Zeit mal gelöscht werden soll ? Ich denke nicht das MS hier unbedingt gelöscht haben möchte, zumindest macht das aus meiner Erfahrung kaum ein Programm. Ich bin immer ganz froh wenn die Platte mal wieder eng wird das ich da noch ein paar GB wieder freischaufeln kann. Edit: Wenn ich Temp Daten verwende, dann in eigenen Unterverzeichnissen, da habe ich dann die volle Kontrolle drüber. Rollo |
AW: Wie gehe ich mit meinen temporären Daten um?
Solche Dateien bräuchten ein Selbstzerstörungsflag, so Mission-impossible-mäßig, die Datei zerstört sich in 3 Stunden selbst.
|
AW: Wie gehe ich mit meinen temporären Daten um?
Zitat:
Zitat:
Delphi-Quellcode:
und so sieht sie aus:
DelTemp.bat
Delphi-Quellcode:
Das sind die mit bekannten Stellen, an denen diverse andere ihren Müll hinterlassen und dort wird dann beim Rechnerstart aufgeräumt. Was noch in Benutzung ist, kann von der Batchdatei nicht gelöscht werden und ist dann ggfls. beim nächsten Mal dran.
@echo temporaere Dateien loeschen
if exist o:\~$PVRTmp0$\*.* rd /s /q o:\~$PVRTmp0$ if exist e:\~$PVRTmp0$\*.* rd /s /q e:\~$PVRTmp0$ if exist c:\temp\acrord32_sbx\*.* rd /s /q c:\temp\acrord32_sbx if exist "c:\Dokumente und Einstellungen\stephan\Lokale Einstellungen\Temporary Internet Files\Content.IE5\*.*" rd /s /q "c:\Dokumente und Einstellungen\stephan\Lokale Einstellungen\Temporary Internet Files\Content.IE5" if exist "c:\Dokumente und Einstellungen\stephan\Cookies\*.*" rd /s /q "c:\Dokumente und Einstellungen\stephan\Cookies" if exist "c:\wincmd5\$wc\*.*" del /q c:\wincmd5\$wc\*.*" if exist "c:\temp\*.*" del /q c:\temp\*.*" if exist "c:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVirus\LogFiles\*.*" rd /s /q "c:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVirus\LogFiles" if exist "c:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVirus\Reports\*.*" rd /s /q "c:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVirus\Reports" Seit dem wird die Festplatte nicht mehr so schnell voll. |
AW: Wie gehe ich mit meinen temporären Daten um?
Danke für die vielen Antworten bisher!
Ich will es an dieser einen Anwendung gar nicht zu sehr festmachen. Dem Anwender kann ich (im negativen Sinne) alles zutrauen. Auch dass er 500 mal den PDF-Betrachter offen lässt und wieder ins Hauptprogramm wechselt. Ich hätte gedacht dass Windows mit der Zeit automatisch das macht, wenn ich im Explorer auf Bereinigen gehe. Da es da wohl nichts gibt muss man periodisch wohl alles rauswerfen. Ich dachte dann an so etwas in der Art. Würdet ihr das so absegnen oder übersehen ich noch etwas?
Delphi-Quellcode:
unit App.TempFileManager;
interface uses System.TimeSpan, System.Classes, System.Types; type TTempFileManager = class(TObject) protected const guid = '{255AC97A-A42E-44F3-86E1-DF00B7C67FD5}'; protected var maxFileAge: TTimeSpan; protected function getPath(): String; function findFiles(const olderThan: TDateTime): TStringDynArray; public var cleanupOnEveryRequest: Boolean; public constructor Create(const maxFileAge: TTimeSpan); overload; constructor Create(const maxFileAgeHours: Integer); overload; procedure doCleanup(const recursive: Boolean = False); /// <summary> /// Liefert einen neuen Dateinamen im <see cref="Path" />-Verzeichnis /// </summary> /// <param name="extension"> /// Optionale Dateinamenerweiterung. Beispiel: <c>.pdf</c> oder /// <c>txt</c>. Das Trennzeichen-Prefix ist optional /// </param> function getTempFileName(const extension: String = ''): String; /// <summary> /// Liefert einen <c>TFileStream</c> auf eine neue, im /// <see cref="Path"/>-Verzeichnis erstellte Datei /// </summary> /// <param name="extension"> /// Optionale Dateinamenerweiterung. Beispiel: <c>.pdf</c> oder /// <c>txt</c>. Das Trennzeichen-Prefix ist optional /// </param> function getTempFile(const extension: String = ''): TFileStream; public //properties property Path: String read getPath; end; implementation uses System.IoUtils, System.SysUtils, System.DateUtils; type TDateTimeHelper = record helper for TDateTime function IncSpan(const timeSpan: TTimeSpan): TDateTime; function DecSpan(const timeSpan: TTimeSpan): TDateTime; end; TFileHelper = record helper for TFile class procedure TryDelete(const Path: String); static; end; { TTempFileManager } constructor TTempFileManager.Create(const maxFileAgeHours: Integer); var asTimeSpan: TTimeSpan; begin asTimeSpan := TTimeSpan.FromHours(maxFileAgeHours); self.Create(asTimeSpan); end; constructor TTempFileManager.Create(const maxFileAge: TTimeSpan); begin inherited Create(); self.maxFileAge := maxFileAge; end; procedure TTempFileManager.doCleanup(const recursive: Boolean = False); var mustBeOlderThan: TDateTime; foundFiles: TStringDynArray; filePath: String; begin mustBeOlderThan := Now().DecSpan(maxFileAge); foundFiles := findFiles(mustBeOlderThan); for filePath in foundFiles do TFile.TryDelete(filePath); end; function TTempFileManager.findFiles(const olderThan: TDatetime): TStringDynArray; var predicate: TDirectory.TFilterPredicate; begin if not TDirectory.Exists(Path) then Exit(nil); predicate := function(const Path: string; const SearchRec: TSearchRec): Boolean begin // SearchRec.TimeStamp bezeichnet das "Geändert am" Result := CompareDateTime(SearchRec.TimeStamp, olderThan) = LessThanValue; end; Result := TDirectory.GetFiles(Path, TSearchOption.soTopDirectoryOnly, predicate); end; function TTempFileManager.getTempFileName(const extension: String): String; var filename: TFileName; begin if cleanupOnEveryRequest then doCleanup(); filename := TPath.GetGUIDFileName(); if not extension.IsEmpty() then begin if not extension.StartsWith(TPath.ExtensionSeparatorChar) then filename := filename + TPath.ExtensionSeparatorChar; filename := filename + extension; end; Result := TPath.Combine(Path, filename) end; function TTempFileManager.getPath(): String; begin Result := TPath.GetTempPath(); Result := TPath.Combine(Result, guid); end; function TTempFileManager.getTempFile(const extension: String): TFileStream; var path: String; begin path := getTempFileName(extension); if TFile.Exists(path) then TFile.Delete(path); Result := TFile.Create(path); end; { TDateTimeHelper } function TDateTimeHelper.IncSpan(const timeSpan: TTimeSpan): TDateTime; begin Result := System.DateUtils.IncMilliSecond(self, Round(timeSpan.TotalMilliseconds)); end; function TDateTimeHelper.DecSpan(const timeSpan: TTimeSpan): TDateTime; begin Result := System.DateUtils.IncMilliSecond(self, Round(-timeSpan.TotalMilliseconds)); end; { TFileHelper } class procedure TFileHelper.TryDelete(const Path: String); begin try Delete(Path); except on EDirectoryNotFoundException do; on EFileNotFoundException do; on EInOutError do; end; end; end. |
AW: Wie gehe ich mit meinen temporären Daten um?
Wenn man möchte kann man die o.g. Batchdatei dann noch mit "delage32.exe" (
![]() |
AW: Wie gehe ich mit meinen temporären Daten um?
Zitat:
![]() Zitat:
![]() |
AW: Wie gehe ich mit meinen temporären Daten um?
Ja, das Flag benutzt wahrscheinlich 7-Zip, weshalb man fast keine einzige Datei in Archiven mit einem Doppelklick öffnen kann da er immer die temporären Dateien schon löscht bevor das Anzeige-Programm überhaupt die Chance hatte es zu öffnen.
|
AW: Wie gehe ich mit meinen temporären Daten um?
Das wäre dann ein Bug von 7-Zip. Wenn man das Flag korrekt benutzt, kann es sehr hilfreich sein.
Ich habe auch gerade mal nachgeschaut: Windows führt die Datenträgerbereinigung automatisch aus, aber wohl erst wenn der Speicherplatz knapp wird. Ein entsprechender Task ist in der "Aufgabenplanung" definiert. Man könnte sich leicht einen eigenen anlegen, der die Datenträgerbereinigung öfter ausführt, z.B. einmal wöchentlich. |
AW: Wie gehe ich mit meinen temporären Daten um?
Tatsächlich. "Aufgaben planen" -> [...] -> Vom System verwendete Wartungsaufgabe zum Starten einer unbeaufsichtigten automatischen Datenträgerbereinigung, sobald der freie Speicherplatz zur Neige geht.
Das schaue ich mir mal näher an... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz