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;
Essayez cette
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;
ou cette
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;
Pour les types Delphi, Char et PChar sont les types WideChar et PWideChar, respectivement.
Si vous utilisez des API Windows qui renvoient des données dans des buffers char, ces buffers doivent être redéclarés comme des tableaux d'octets ou un tableau d'AnsiChar.
Si vous appelez ces API Windows et que vous envoyez des tampons, utilisez la fonction sizeof lorsque vous indiquez à l'API la durée de votre tampon. Ces appels doivent être remplacés par la fonction Longueur, car les API widechar de Windows requièrent le nombre de caractères, pas le nombre d'octets.
Salut.
Vous devriez éditer votre question pour inclure le message d'erreur (une bonne habitude - logique, non?) – Argalatyr
S'il vous plaît voir le lien suivant à la fois pour une discussion du problème (presque le même code) et une meilleure version qui prend en compte un peu plus de ce que dit la documentation de l'API concernant la taille maximale du tampon. https://forums.embarcadero.com/thread.jspa?threadID=18246 –