--- ---
procedure TForm1.Button1Click(Sender: TObject); var TempFile: array[0..MAX_PATH - 1] of Char; TempPath: array[0..MAX_PATH - 1] of Char; begin GetTempPath(MAX_PATH, TempPath); if GetTempFileName(TempPath, PChar('abc'), 0, TempFile) = 0 then raise Exception.Create( 'GetTempFileName API failed. ' + SysErrorMessage(GetLastError) ); ShowMessage(TempFile); end;
Note that this would actually create the temp file in the windows temp folder. Check online help for GetTempFileName, uUnique parameter for details.
Tip by Jack Sudarev
function MyGetTempFile(const APrefix: string): string; var MyBuffer, MyFileName: array[0..MAX_PATH] of char; begin FillChar(MyBuffer, MAX_PATH, 0); FillChar(MyFileName, MAX_PATH, 0); GetTempPath(SizeOf(MyBuffer), MyBuffer); GetTempFileName(MyBuffer, APrefix, 0, MyFileName); Result := MyFileName; end;
Usage:
const MyPrefix: String = 'abc'; MyTempFile := MyGetTempFile(MyPrefix);
Tip by Andrei Fomine
Pass in the path and filename you want for the first parameter and your
extension as the second. If you want the file to always be
myfile1.tmp rather than myfile.tmp leave the last
parameter, otherwise set it to false. E.g. to create a file like
c:\Tempdir\MyTempFile2000.tmp do
sNewFileName := CreateNewFileName('C:\TempDir\MyTempFile','.tmp');
function CreateNewFileName(BaseFileName: String; Ext: String; AlwaysUseNumber: Boolean = True): String; var DocIndex: Integer; FileName: String; FileNameFound: Boolean; begin DocIndex := 1; Filenamefound := False; {if number not required and basefilename doesn't exist, use that.} if not(AlwaysUseNumber) and (not(fileexists(BaseFilename + ext))) then begin Filename := BaseFilename + ext; FilenameFound := true; end; while not (FileNameFound) do begin filename := BaseFilename + inttostr(DocIndex) + Ext; if fileexists(filename) then inc(DocIndex) else FileNameFound := true; end; Result := filename; end;
I simply check if the file exists and return the first that doesn't.
Tip by Toby Allen