【温故Delphi】Win32API之GetTempFileName

时间:2022-10-17 00:26:48

所遇问题

  新建的算量工程文件暂时保存到临时文件中,代码中调用了Win32 API——GetTempFileName

  但在一台笔记本上,函数返回了一个空字符串!

  为了查明原因想到了好用的GetLastError——返回错误信息。

  结果错误信息为“拒绝访问”,这让我很快想到了传入文件夹用户权限问题。

  经过检验,果然当前用户没有传入文件夹的写权限。

   function GetTempFileA(const APrefix: string; const APath: string): string;
var
sPath: string;
nErrCode: UINT;
begin
SetLength(Result, MAX_PATH);
sPath := Trim(APath);
if sPath = '' then
sPath := GetCurrentDir; SetLastError(ERROR_SUCCESS);
if GetTempFileName(PChar(sPath), PChar(APrefix), , PChar(Result)) = then
begin
Result := '';
raise Exception.Create(SysErrorMessage(GetLastError));
end
else
SetLength(Result, StrLen(PChar(Result)));
end;

API说明

  【温故Delphi】Win32API之GetTempFileName

反思

  茁壮的程序代码一定要有好的容错方法,一定要将错误信息发布出去。

  不怕出错,就怕不知道错在哪!