![]() |
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.
|
Re: Temp Datei erstellen und wieder löschen
also
![]() ![]() ![]() ![]() was kleines aus meiner Funktionssamlung ... wir etwa so verwendet wie ![]()
Delphi-Quellcode:
Und dann noch das ...
// © 1997-2008 by FNS Enterprize's (FNSE.de)
// © 2003-2008 by himitsu @ Delphi-PRAXiS.de Function CreateTempFileA(lpPrefixString: LPSTR; bShareRead: Boolean = False; TempFileName: PFileNameA = nil): HANDLE; {not Inline} Const RM: Array[Boolean] of DWORD = (FILE_SHARE_READ, 0); Var i: Integer; S, S2: TFileNameA; E: LongInt; Begin Result := INVALID_HANDLE_VALUE; If GetTempPathA(MAX_PATH, @S) > MAX_PATH Then Exit; i := 9999; Repeat If GetTempFileNameA(@S, lpPrefixString, 0, @S2) = 0 Then Exit; Result := CreateFileA(@S2, GENERIC_READ or GENERIC_WRITE, RM[bShareRead], nil, CREATE_NEW, FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE, 0); If Result = INVALID_HANDLE_VALUE Then Begin E := GetLastError; SetLastError(E); End Else E := 0; Dec(i); Until (i = 0) or (E <> ERROR_ALREADY_EXISTS); If TempFileName <> nil Then TempFileName^ := S2; End;
Delphi-Quellcode:
wer will kann TFileName und TempFileName auch ausbauen ... ist ja nur nötig, falls man wissen will, wo/welche Datei erstellt wurde, oder man baut es sich auf PAnsiChar/PChar um (oder gar auf String/AnsiString).
Type
LPSTR = PAnsiChar; HANDLE = THandle; TFileName = packed Record[1..MAX_PATH] of AnsiChar; PFileName = ^TFileName; Zitat:
(in S2 steht der Name) |
Re: Temp Datei erstellen und wieder löschen
@shmia:
Hallo, kannst du mir sagen in welcher Unit die Funktion zu finden ist??? Danke!!
Delphi-Quellcode:
Folgende Funktionen wurden aus der JCL kopiert.
Also ich benütze die JCL in allen meinen Programm, denn sie enthält fast alles, was Borland in der RTL/VCL vergessen hat. 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
Zitat:
![]() |
Re: Temp Datei erstellen und wieder löschen
Danke dir!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 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