Delphi-PRAXiS
Seite 2 von 2     12   

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)

himitsu 24. Apr 2008 14:09

Re: Temp Datei erstellen und wieder löschen
 
also MSDN-Library durchsuchenFILE_ATTRIBUTE_TEMPORARY + MSDN-Library durchsuchenFILE_FLAG_DELETE_ON_CLOSE ist schon OK, aber MSDN-Library durchsuchenGetTempFileName würde ich noch mit MSDN-Library durchsuchenGetTempPath kombinieren.


was kleines aus meiner Funktionssamlung ... wir etwa so verwendet wie MSDN-Library durchsuchenCreateFile:
Delphi-Quellcode:
//  © 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;
Und dann noch das ...
Delphi-Quellcode:
Type
  LPSTR = PAnsiChar;
  HANDLE = THandle;
  TFileName = packed Record[1..MAX_PATH] of AnsiChar;
  PFileName = ^TFileName;
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).


Zitat:

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?
jupp ... nur das vor CreateFile :angel:
(in S2 steht der Name)

DelphiManiac 30. Jun 2008 15:09

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;

shmia 30. Jun 2008 16:09

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

Zitat von DelphiManiac
@shmia: Hallo, kannst du mir sagen in welcher Unit die Funktion zu finden ist???

In Unit JclFileUtils; diese liegt unter JCL\Source\Common
http://sourceforge.net/projects/jcl/

DelphiManiac 30. Jun 2008 19:42

Re: Temp Datei erstellen und wieder löschen
 
Danke dir!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.
Seite 2 von 2     12   

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