我正在尝试用C ++创建一个临时文本文件,然后在最后删除它 该计划。我没跟谷歌好运。
你能告诉我使用哪些功能吗?
下面的答案告诉我如何创建临时文件。如果我想要怎么办? 创建一个文件(tmp.txt),然后删除它?我该怎么做?
答案 0 :(得分:22)
也许这会有所帮助
FILE * tmpfile ( void );
http://www.cplusplus.com/reference/clibrary/cstdio/tmpfile/
打开临时文件
创建一个临时二进制文件,打开 更新(wb +模式 - 请参阅fopen for 细节)。文件名是有保证的 与众不同 现有文件。临时文件 创建时会自动删除 流关闭(fclose)或何时 程序正常终止。
另见
char * tmpnam ( char * str );
生成临时文件名
包含文件名的字符串 与现有文件不同的是 产生。这个字符串可以用来 不用创建临时文件 覆盖任何其他现有文件。
答案 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
打开该文件。
tmpnam
和tmpfile
,因为他们可能会受到竞争条件的影响 - 详见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的标志会创建一个没有名称的临时文件(即它不会显示在文件系统)。这有一些有趣的功能:
答案 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();