Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Temp Datei erstellen und wieder löschen (https://www.delphipraxis.net/111851-temp-datei-erstellen-und-wieder-loeschen.html)

Salomon 10. Apr 2008 12:56


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

mkinzler 10. Apr 2008 12:58

Re: Temp Datei erstellen und wieder löschen
 
man könnte auch einen Zufälligen Basisnamen kombiniert mit einem Timestamp verwenden

Luckie 10. Apr 2008 13:02

Re: Temp Datei erstellen und wieder löschen
 
Oder man benutzt einfach die API-Funktion [msdn]Get^TempFilename[/msdn].

TonyR 10. Apr 2008 13:10

Re: Temp Datei erstellen und wieder löschen
 
Zitat:

Zitat von Salomon
...Wie kann ich sicherstellen, das der Dateiname nicht schon existiert? ...

Delphi-Quellcode:
if fileexists(Pfad+Dateiname) then ...
Zitat:

Zitat von Salomon
...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?

Entweder das oder du löscht die Datei gleich, ich weiß ja jetz nicht genau wie lang sie existent sein sollen.
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

RavenIV 10. Apr 2008 13:11

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.

Salomon 10. Apr 2008 13:23

Re: Temp Datei erstellen und wieder löschen
 
WOW, das sind mal viele Anrgegungen :) Ich werd dann erstmal etwas "basteln". Thanx

wido 10. Apr 2008 14:31

Re: Temp Datei erstellen und wieder löschen
 
Windows bietet da 2 Mechanismen:

1. Einen geeigneten Namen bekommst Du via MSDN-Library durchsuchenGetTempFilename.
2. MSDN-Library durchsuchenCreateFile bietet ein Flag mit dem Namen FILE_FLAG_DELETE_ON_CLOSE. Die von Dir erstellte Temporäre Datei wird dann automatisch gelöscht, sobald Du sie geschlossen hast.

Einfacher gehts nicht ;).

Salomon 11. Apr 2008 11:38

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);

shmia 11. Apr 2008 13:55

Re: Temp Datei erstellen und wieder löschen
 
Zitat:

Zitat von Salomon
Gibts da ein "GetTempFilename" das mir nur einen Namen zurückgibt und keine Datei gleichzeitig erzeugt?

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.
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;

Ydobon 11. Apr 2008 13:57

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 07:28 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz