Windows.Pas
function GetTempFileName(lpPathName, lpPrefixString: PWideChar;
uUnique: UINT; lpTempFileName: PWideChar): UINT; stdcall;
function GetTempPath(nBufferLength: DWORD; lpBuffer: PWideChar): DWORD; stdcall;
SysUtils.Pas
function ChangeFileExt(const FileName, Extension: string): string;
試試這個
Function TWinUtils.GetTempFile(Const Extension: STRING): STRING;
Var
Buffer: ARRAY [0 .. MAX_PATH] OF WideChar;
Begin
Repeat
GetTempPath(Length(Buffer), Buffer);
GetTempFileName(Buffer, '~~', 0, Buffer);
Result := ChangeFileExt(Buffer, Extension);
Until not FileExists(Result);
End;
或本
Function GetTempFile(Const Extension: String): String;
Var
Buffer: String;
Begin
SetLength(Buffer,MAX_PATH);
Repeat
GetTempPath(MAX_PATH, PChar(Buffer));
GetTempFileName(PChar(Buffer), '~~', 0, PChar(Buffer));
Result := ChangeFileExt(Buffer, Extension);
Until not FileExists(Result);
End;
對於Delphi,Char和PChar類型分別是WideChar和PWideChar類型。
如果您使用任何將數據返回到char緩衝區的Windows API,則需要將這些緩衝區重新聲明爲字節數組或AnsiChar數組。
如果您正在調用這些Windows API併發送緩衝區,如果在告訴API您的緩衝區的時間長度時使用了sizeof函數。這些調用需要更改爲長度函數,因爲Windows widechar API的要求字符數,而不是字節數。
再見。
你應該編輯你的問題,以包括錯誤信息(一個好習慣 - 有道理,對不對?) – Argalatyr 2009-09-14 13:02:14
請參閱以下鏈接,討論問題(幾乎相同的代碼)和更好的版本說明API文檔中關於最大緩衝區大小的更多內容。 https://forums.embarcadero.com/thread.jspa?threadID=18246 – 2009-09-14 13:53:42