【问题标题】:How can I get the temporary filename by using the tmpfile () [duplicate]如何使用 tmpfile () [重复] 获取临时文件名
【发布时间】:2016-03-09 11:05:55
【问题描述】:

tmpfile() 函数表示:

当流关闭(fclose)或程序正常终止时,创建的临时文件会被自动删除。如果程序异常终止,文件是否被删除取决于具体的系统和库实现。"

tmpfile() 函数返回一个指向创建的临时文件的流指针,而不是文件的路径。 我需要临时文件名路径,因为它需要传递其他库函数。

我的应用程序可以异常退出,因此 tmpfile() 函数可以在异常退出时工作。

如何获取临时文件路径并在退出时自动删除文件

【问题讨论】:

  • 如果你需要一个文件名,那么使用 tmpfile() 没有意义
  • 您是针对特定系统(例如 Linux 或 POSIX)还是需要它是可移植的?
  • 改用mktemp()怎么样?
  • 这里有一些有用的答案:stackoverflow.com/questions/1022487/…
  • mktemp 不安全,因为可能存在竞争条件。

标签: c++ c


【解决方案1】:

您可以使用tmpnam(),而不是使用tmpfile()

它将返回一个可用于创建临时文件的文件名。

参见以下示例(摘自http://www.cplusplus.com/reference/cstdio/tmpnam/):

#include <stdio.h>

int main ()
{
   char buffer [L_tmpnam];
   char *pointer;

   tmpnam (buffer);
   printf ("Tempname #1: %s\n", buffer);

   pointer = tmpnam (NULL);
   printf ("Tempname #2: %s\n", pointer);

   return 0;  
}

然后您可以使用此文件名创建文件并在退出时将其删除。

编辑:

  • tmpnam 返回的名称没有指定任何路径。 fopen 使用的默认路径将是您当前的工作目录。

  • 删除文件由您决定。它不会自动完成。你可以通过拨打remove来完成。

【讨论】:

  • 如何获取临时文件路径并在退出时自动删除文件
  • @hafiz:你可能想要atexit
猜你喜欢
  • 1970-01-01
  • 2015-04-20
  • 2018-01-21
  • 2010-09-06
  • 1970-01-01
  • 2010-12-01
  • 2012-08-14
  • 1970-01-01
  • 2012-07-05
相关资源
最近更新 更多