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

时间:2009-06-20 20:34:32

标签: c++ file

我正在尝试用C ++创建一个临时文本文件,然后在最后删除它 该计划。我没跟谷歌好运。

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


下面的答案告诉我如何创建临时文件。如果我想要怎么办? 创建一个文件(tmp.txt),然后删除它?我该怎么做?

8 个答案:

答案 0 :(得分:22)

也许这会有所帮助

FILE * tmpfile ( void );

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

  

打开临时文件

     

创建一个临时二进制文件,打开   更新(wb +模式 - 请参阅fopen for   细节)。文件名是有保证的   与众不同   现有文件。临时文件   创建时会自动删除   流关闭(fclose)或何时   程序正常终止。

另见

char * tmpnam ( char * str );
  

生成临时文件名

     

包含文件名的字符串   与现有文件不同的是   产生。这个字符串可以用来   不用创建临时文件   覆盖任何其他现有文件。

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

答案 1 :(得分: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.
}

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

应该避免{p> tmpnamtmpfile,因为他们可能会受到竞争条件的影响 - 详见man tmpfile(3)

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:3)

在Linux上(从内核3.11开始),打开(2)O_TMPFILE的标志会创建一个没有名称的临时文件(即它不会显示在文件系统)。这有一些有趣的功能:

  • 不用担心唯一的名字,它只是一个inode,没有名字。
  • 创作期间没有竞争条件(例如符号链接攻击)。
  • 如果您的应用崩溃,则不会有任何迷路文件,它会自动删除。

答案 4 :(得分:2)

如果您需要一个命名文件(例如,您可以将该名称传递给另一个进程,可能是编译器或编辑器),那么请注册一个清除函数,该函数会使用atexit()删除该文件。您可以使用C ++ <iostream>或C FILE *<cstdio>)来创建文件。不完全标准但广泛可用的mkstemp()函数创建一个文件并告诉你它的名字以及返回一个文件描述符(第三个I / O机制);您可以使用fdopen()函数将文件描述符转换为FILE *

如果你不需要一个命名文件,那么C风格的FILE *就可以了,那就按照@Tom的建议来看看tmpfile()

答案 5 :(得分:1)

我想知道为什么你们大多数人都向他展示了C语言,而不是C ++方式 这是fstream 试试这个,删除文件是依赖操作系统的,但你可以使用boost.filesystem让事情变得简单。

答案 6 :(得分:0)

好吧,假设您已成功创建临时文件,可以使用删除功能将其删除。

该函数在stdio.h中声明 -

#include <stdio.h>

int remove(const char *pathname);

例如,如果要删除名为myfile.txt的文件,则代码为

#include<stdio.h>

int main()
{
  if(remove("myfile.txt") == -1)
  {
    fprintf(stderr,"Remove failed");
    exit(EXIT_FAILURE);
  }
  exit(EXIT_SUCCESS);
}

我希望到现在为止,您已经知道如何创建临时文件,因此这应该可以解决您的查询问题。 希望它有所帮助。

答案 7 :(得分:0)

Boost 提供了一种干净、可移植且未弃用的创建临时文件的方法:

auto temporary_file = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path();