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 函数。这些调用需要更改为 Length 函数,因为Windows Widechar API 需要字符数,而不是字节数。
再见。