![]() |
Wie gehe ich mit meinen temporären Daten um?
Eine Anwendung erstellt munter Dateien in
Delphi-Quellcode:
(%userprofile%\AppData\Local\Temp). Bislang ist anscheinend jeder davon ausgegangen dass Windows diese Dateien irgendwann wohl von alleine löschen wird.
TPath.GetTempPath()
Ich stelle gerade etwas schockiert fest, ![]() Meine Idee wäre nun folgende:
Das sollte relativ sicher sein, oder? Ich will nicht die ganze Zeit erstelle Dateien im Hintergrund tracken. Es kann auch sein dass die Anwendung wochen- und monatelang am Stück durchläuft, die Systeme haben auch nur eine relativ kleine SSD: Prüfen bei Anwendungsstart und -Ende reicht nicht. Hat noch jemand eine bessere Idee? Ich weiß noch dass man in der Registry eine Liste von Dateien anlegen kann die beim nächsten Reboot gelöscht werden sollen, aber das ist uU zu spät und man braucht dafür Admin-Rechte. |
AW: Wie gehe ich mit meinen temporären Daten um?
Vielleicht zu umständlich, aber mit
![]() Anderer Ansatz wäre das Starten der externen Programme in einem extra Thread, den du mit ![]() |
AW: Wie gehe ich mit meinen temporären Daten um?
Hallo,
habe mir mal vor längerer Zeit ein Progrämmelke dafür geschrieben, dass auf den Servern alte Log-Dateien wegwerfen sollte. Man kann die Verzeichnisse per Dialog auswählen, und angeben, wie alt (oder älter) Dateien sein müssen, die gelöscht werden sollen. Per Button wird das dann gemacht. Da das für den Serverbetrieb nicht sehr clever ist, kann man das Programm auch mit einem beliebigen Parameter aufrufen. Dann räumt es auf und beendet sich wieder. Das dann in den Taskplaner gepackt und schon muss man sich nicht mehr kümmern. Schau mal, vielleicht kannste damit ja was anfangen. (Nutzt 'nen Dialog aus der JVCL.) |
AW: Wie gehe ich mit meinen temporären Daten um?
Zitat:
Du weißt doch welche Dateien du erstellt hast. Lösche sie beim Beenden deines Programms. Fertig. Nix mit offenen Handles suchen oder so. |
AW: Wie gehe ich mit meinen temporären Daten um?
Er schreibt, dass die Anwendung ggf. zu lang läuft, so dass zwischen Programmstart und -Ende zusätzlich geprüft und bei Bedarf gehandelt werden muss.
|
AW: Wie gehe ich mit meinen temporären Daten um?
Zitat:
![]() Zitat:
|
AW: Wie gehe ich mit meinen temporären Daten um?
Zitat:
|
AW: Wie gehe ich mit meinen temporären Daten um?
Wenn ich dich richtig verstanden habe, dann kopierst du Dateien in den Temp-Ordner um sie dann zu öffnen. Danach können sie wieder gelöscht werden, richtig?
Was spricht dann dagegen, per StartAndWait darauf zu warten? Oder wie hier bereits geschrieben in einen extra Thread auslagern. Die ganze Geschichte mit den 5 Tagen usw. finde ich fast etwas umständlich. Außer du startest die Datei mehrmals hintereinander und willst sie nicht jedes mal wieder in den Temp-Ordner kopieren. Ich hatte schonmal den Fall, dass ich eine Datei aus der Datenbank öffnen wollte. Hier habe ich einfach folgende Funktion benutzt, die den Exitcode auswertet:
Delphi-Quellcode:
Aber ich denke ja mal fast, dass du diese Methode schon ausgeschlossen hast. Wieso?
function StartAndWait(const ExecuteFile: string; ParamString: string = ''): boolean;
var SEInfo: TShellExecuteInfo; ExitCode: DWORD; begin Result := False; if not FileExists(ExecuteFile) then Exit; FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo); with SEInfo do begin fMask := SEE_MASK_NOCLOSEPROCESS; Wnd := Application.Handle; lpFile := PChar(ExecuteFile); lpParameters := PChar(ParamString); nShow := SW_SHOWNORMAL; end; if ShellExecuteEx(@SEInfo) then begin repeat Application.ProcessMessages; Sleep(100); GetExitCodeProcess(SEInfo.hProcess, ExitCode); until (ExitCode <> STILL_ACTIVE) OR Application.Terminated; Result := True; end; end; begin [...] //Aus Datenbank in Temp-Order kopieren StartAndWait(ExecuteFile);//Starten und auf Beenden warten DeleteFile(ExecuteFile); //Löschen end; Grüße |
AW: Wie gehe ich mit meinen temporären Daten um?
Wie viel kannst Du Deinen Anwendern zutrauen?
Ich hatte hier mal mit Office-Dokumenten zutun, die in einer Datenbank gespeichert wurden. Via Doppelklick hatte ich sie auch in den Temp-Ordner gelegt und dann per ShellExecute geöffnet. Zuerst war der Anwender glücklich, denn er sah das Dokument. Dann fing er ungnädigerweise an, das Dokument zu bearbeiten und auch zu speichern - auch das ging. Und über die Liste der letzten Dokumente hat er es jenseits unserer Anwendung in Excel wieder aufgerufen und weiter bearbeitet - unwissentlich, dass die Datei im Temp-Ordner nur "bedingt gut" aufgehoben war. Bis dann irgendeine System-Reinigung zuschlug und die Datei ins Aus beförderte. |
AW: Wie gehe ich mit meinen temporären Daten um?
Soweit ich mich erinnere, kann man auch die Namen der Temp-Dateien vorgeben, zumindest den Präfix.
Wenn das noch stimmt, lösche beim Programmstart einfach alle 'Deine' (alten) Tempdateien. Die, die gesperrt sind, sind offenbar noch in Verwendung. Oder ist das ein Service? Na dann, einfach regelmäßig (dann kannst Du dir die auch merken). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 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