delphi 获取临时文件目录(文件夹)和文件

获取临时文件目录(文件夹)和文件

代码

调用Winapi方式

procedure TForm1.Button1Click(Sender: TObject);
var
  vPath, vFile: array [0 .. MAXBYTE] of Char;
begin
  //获取临时文件路径
  GetTempPath(MAXBYTE, vPath);
  //生成一个新的临时文件(不使用时需要删除)
  GetTempFileName(vPath, 'tmp', 0, vFile);
  DeleteFile(vFile);
  ShowMessage('临时文件目录 ' + vPath);
  ShowMessage('临时文件 ' + vFile);
end;

调用System.IOUtils.TPath方式

uses System.IOUtils;

procedure TForm1.Button2Click(Sender: TObject);
var
  vPath, vFile: string;
begin
  //获取临时文件路径
  vPath := TPath.GetTempPath;
  //生成一个新的临时文件(不使用时需要删除)
  vFile := TPath.GetTempFileName;
  DeleteFile(vFile);
  ShowMessage('临时文件目录 ' + vPath);
  ShowMessage('临时文件 ' + vFile);
end;

方法

System.IOUtils.TPath.GetTempPath

class function GetTempPath: string; static;

unit

System.IOUtils

返回存储临时文件目录的路径。此目录是系统管理的位置; 保存在这里的文件可能会在应用程序会话或系统重启之间被删除。

如果运行应用程序的系统不支持所请求的文件夹,或者所请求的文件夹在系统中不存在,此函数将返回一个空字符串。

指向各个平台上的位置:

  • WindowsOS XLinux 上,它指向一个系统范围的目录。
  • iOSAndroid 上,它指向一个特定于用户、特定于应用程序的目录。
平台 示例路径
Windows XP C:\Documents and Settings\<User name>\Local Settings\Temp
Windows Vista 或更高版本 C:\Users\<User name>\AppData\Local\Temp
OS X /var/folders/<random folder name>
iOS Device /private/var/mobile/Applications/<application ID>/tmp
iOS Simulator /Users/<username>/Library/Application Support/iPhone Simulator/<SDK version>/Applications/<application ID>/tmp
Android /storage/emulated/0/Android/data/<application ID>/files/tmp
Linux /tmp

System.IOUtils.TPath.GetTempFileName

class function GetTempFileName: string; static;

unit

System.IOUtils

生成一个新的唯一命名的临时文件。实际上在临时目录创建了一个零大小的文件并返回其名称。调用者必须在不再使用该文件后将其删除。

如果用户无权访问系统的临时目录,会引发异常。

Linux 上,临时文件名称基于 GUID,格式如下:File_%8x%4x%4x%16x_tmp

  • %8x 代表 GUID.D1
  • %4x 代表 GUID.D2
  • %4x 代表 GUID.D3
  • %16x 代表 GUID.D4

GetTempPath

function GetTempPath(nBufferLength: DWORD; lpBuffer: LPWSTR): DWORD;

unit

Winapi.Windows

临时文件目录的路径。

参数

nBufferLength 由 lpBuffer 标识的字符串缓冲区的大小。(以 TCHAR 为单位)

lpBuffer 指向字符串缓冲区的指针,用于接收指定临时文件路径的以 null 结尾的字符串。 返回的字符串以反斜杠结尾,例如C:\TEMP\”。

返回值

如果函数成功,则返回值为复制到 lpBuffer 的字符串的长度,不包括终止 null 字符。 如果返回值大于 nBufferLength,则返回值是保存路径所需的缓冲区的长度。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError

GetTempPath 函数按以下顺序检查是否存在环境变量,并使用找到的第一个路径:

  1. TMP 环境变量指定的路径。
  2. TEMP 环境变量指定的路径。
  3. USERPROFILE 环境变量指定的路径。
  4. Windows 目录。

请注意,该函数不验证路径是否存在,也不会测试当前进程是否对路径具有任何类型的访问权限。

GetTempFileName

function GetTempFileName(lpPathName, lpPrefixString: LPCWSTR;
  uUnique: UINT; lpTempFileName: LPWSTR): UINT;

unit

Winapi.Windows

为临时文件创建一个名称。 如果生成唯一文件名,则会创建一个空文件,并释放该文件的句柄;否则,仅生成文件名。

参数

lpPathName 文件名的目录路径。 通常为当前目录或 GetTempPath 函数的结果 。

lpPrefixString 文件名的前缀字符串。该函数最多使用此字符串的前三个字符作为文件名的前缀。

uUnique 如果为0,将创建一个空文件并将其关闭。如果不是0,仅创建文件名,不会尝试验证文件名的唯一性。

如果为0,则函数会尝试使用当前系统时间形成唯一的文件名。 如果文件已存在,则数字将增加一个,函数测试此文件是否已存在。 这将继续,直到找到唯一的文件名。

lpTempFileName 指向接收临时文件名的缓冲区的指针。

返回值

如果函数成功,则返回值指定临时文件名中使用的唯一数值。 如果 uUnique 参数为非零,则返回值指定相同的数字。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError

参考

GetTempPathA 函数

GetTempPathW 函数

GetTempFileNameA 函数

GetTempFileNameW 函数

posted @ 2023-01-17 10:15  txgh  阅读(713)  评论(0编辑  收藏  举报