如何在C++中创建临时文本文件?

Mei*_*eir 26 c++ file

我正在尝试用C++创建一个临时文本文件,然后在程序结束时删除它.我没跟谷歌好运.

你能告诉我使用哪些功能吗?


下面的答案告诉我如何创建临时文件.如果我只是想创建一个文件(tmp.txt)然后将其删除怎么办?我该怎么办?

Tom*_*Tom 23

也许这会有所帮助

FILE * tmpfile ( void );
Run Code Online (Sandbox Code Playgroud)

http://www.cplusplus.com/reference/clibrary/cstdio/tmpfile/

打开一个临时文件

创建一个临时二进制文件,打开以进行更新(wb + mode - 有关详细信息,请参阅fopen).保证文件名与任何其他现有文件不同.当流关闭(fclose)或程序正常终止时,将自动删除创建的临时文件.

也可以看看

char * tmpnam ( char * str );
Run Code Online (Sandbox Code Playgroud)

生成临时文件名

生成包含与任何现有文件不同的文件名的字符串.此字符串可用于创建临时文件,而不会覆盖任何其他现有文件.

http://www.cplusplus.com/reference/clibrary/cstdio/tmpnam/

  • 值得一提的是,在某些情况下,tmpfile()和tmpnam()可能存在问题,例如http://www.codeproject.com/KB/web-security/TemporaryFileSecurity.aspx (5认同)
  • 当然,Tmpfile存在返回C文件句柄而不是c ++流的问题. (2认同)
  • @rlbond:的确,这就是为什么我包括了tmpnam. (2认同)
  • 注意不要使用tmpnam()是非常重要的.它的手册页说:"永远不要使用这个功能.请改用mkstemp(3)或tmpfile(3)." (2认同)

Dav*_*veR 20

这是一个完整的例子:

#include <unistd.h>

int main(void) {
  char filename[] = "/tmp/mytemp.XXXXXX"; // template for our file.        
  int fd = mkstemp(filename);    // Creates and opens a new temp file r/w.
                                 // Xs are replaced with a unique number.
  if (fd == -1) return 1;        // Check we managed to open the file.
  write(fd, "abc", 4);           // note 4 bytes total: abc terminating '\0'
  /* ...
     do whatever else you want.
     ... */
  close(fd);
  unlink(filename);              // Delete the temporary file.
}
Run Code Online (Sandbox Code Playgroud)

如果您知道要创建的文件的名称(并且确定它不会存在),那么您显然可以使用它open来打开文件.

tmpnam并且tmpfile应该避免,因为他们可能会受到竞争条件的影响 - man tmpfile(3)详情请参阅.

  • mkstemp(3) 的 Linux 手册页指出文件名的最后 6 个字符必须是 XXXXXX。请参阅http://www.kernel.org/doc/man-pages/online/pages/man3/mkstemp.3.html (2认同)

Vec*_*iac 6

这可能有点偏离主题,因为作者想要创建一个tmp.txt并在使用它之后删除它,但这很简单 - 你可以简单地打开()它并删除它(当然使用boost :: filesystem).

mkstemp()是基于UNIX的.使用Windows,您可以使用GetTempFileName()和GetTempPath()来生成临时文件的路径.MSDN的示例代码:

http://msdn.microsoft.com/en-us/library/aa363875%28VS.85%29.aspx


The*_*igo 5

在 Linux(从内核 3.11 开始)上,有一个 open(2) O_TMPFILE 标志来创建一个没有名称的临时文件(即它不会出现在文件系统中)。这有几个有趣的特点:

  • 不用担心唯一名称,它只是一个 inode,没有名称。
  • 创建期间没有竞争条件(例如符号链接攻击)。
  • 如果您的应用程序崩溃,没有杂散文件,它总是会自动删除。

  • 最小可运行示例:/sf/ask/315629891/#44388030 我想知道glibc是否可以使用它来实现“tmpfile”,但懒于检查现在。 (2认同)