![]() |
Temp Datei erstellen und wieder löschen
Hallo,
ich muss in einen Ordner temporär ein Excel xls file kopieren um dieses mit Daten zu füllen. Wie kann ich sicherstellen, das der Dateiname nicht schon existiert? Sollte ich hier mit FindFirst / FindNext das Verzeichnis durchsuchen? Wie vergebe ich den Datei Namen? Evtl. Datum + einen random String? Und zu guter letzt, wie sorge ich dafür das alte Tempdateien gelöscht werden? Evtl. wieder das Verzeichnis durchsuchen und alle Dateien die älter als eine Woche sind löschen? Gruß Marcus |
Re: Temp Datei erstellen und wieder löschen
man könnte auch einen Zufälligen Basisnamen kombiniert mit einem Timestamp verwenden
|
Re: Temp Datei erstellen und wieder löschen
Oder man benutzt einfach die API-Funktion [msdn]Get^TempFilename[/msdn].
|
Re: Temp Datei erstellen und wieder löschen
Zitat:
Delphi-Quellcode:
if fileexists(Pfad+Dateiname) then ...
Zitat:
Bei der ersten Variante (und wenn du einen TimeStamp mit einbaust) kannst du das Datum aus den Filename schließen, ansonsten geht auch
Delphi-Quellcode:
FileAge(Pfad+Dateiname); //Als Zahlenwert und mit
FileDateToDateTime(FileAge(Pfad+Dateiname)); //als Datum |
Re: Temp Datei erstellen und wieder löschen
man könnte es auch so prüfen:
if not FileExists('C:\temp\irgendwas.xls') then Die Funktion ist im Unit SysUtils. |
Re: Temp Datei erstellen und wieder löschen
WOW, das sind mal viele Anrgegungen :) Ich werd dann erstmal etwas "basteln". Thanx
|
Re: Temp Datei erstellen und wieder löschen
Windows bietet da 2 Mechanismen:
1. Einen geeigneten Namen bekommst Du via ![]() 2. ![]() Einfacher gehts nicht ;). |
Re: Temp Datei erstellen und wieder löschen
Hey, da ich ein Template kopiere brauch ich eigentlich nur einen Temporären Dateinamen.... Gibts da ein "GetTempFilename" das mir nur einen Namen zurückgibt und keine Datei gleichzeitig erzeugt?
Für interessierte, mit diesem Code lösche ich in meinem Temp Verzeichnis alle Dateien älter als 7 Tage:
Delphi-Quellcode:
// -- Delete Temp Data, older one week --- // faAnyFile
if FindFirst(FRM_Main.AppPath +'Files\Temp\' + '*.*', faDirectory, SearchRec) = 0 then begin repeat if (SearchRec.Attr <> faDirectory) and (SearchRec.Name <>'.') and (SearchRec.Name <>'..') then begin //showmessage(DateToStr(FileDateToDateTime(FileAge(FRM_Main.AppPath +'Files\Temp\' + SearchRec.Name)))); //showmessage(SearchRec.Name); if FileDateToDateTime(FileAge(FRM_Main.AppPath +'Files\Temp\' + SearchRec.Name)) < (Date -7) then begin //showmessage('Älter als eine Woche'); DeleteFile(FRM_Main.AppPath +'Files\Temp\' + SearchRec.Name); // Delete File end; end; until FindNext(SearchRec) <> 0; end; FindClose(SearchRec); |
Re: Temp Datei erstellen und wieder löschen
Zitat:
Also ich benütze die JCL in allen meinen Programm, denn sie enthält fast alles, was Borland in der RTL/VCL vergessen hat.
Delphi-Quellcode:
function PathGetTempPath: string;
var BufSize: Cardinal; begin BufSize := Windows.GetTempPath(0, nil); SetLength(Result, BufSize); Windows.GetTempPath(BufSize, PChar(Result)); //StrResetLength(Result); Result := PChar(Result); end; function FileGetTempName(const Prefix: string): string; var TempPath, TempFile: string; R: Cardinal; begin Result := ''; TempPath := PathGetTempPath; if TempPath <> '' then begin SetLength(TempFile, MAX_PATH); R := GetTempFileName(PChar(TempPath), PChar(Prefix), 0, PChar(TempFile)); if R <> 0 then begin StrResetLength(TempFile); Result := TempFile; end; end; end; |
Re: Temp Datei erstellen und wieder löschen
Wusste gar nicht, dass es so eine Funktion gibt, ich habe für solche Späße immer Guids genommen. Du könntest das auch machen (wird in der Beschreibung ja sogar empfohlen) oder uUnique ungleich Null nehmen und hoffen, dass so ein Name noch nicht existiert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 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-2025 by Thomas Breitkreuz