我正在尝试在C++中创建一个临时文本文件,并在程序结束时删除它。我在谷歌上没有找到太多有用的信息。请问应该使用哪些函数?
下面的答案告诉了我如何创建一个临时文件。如果我只想创建一个文件(tmp.txt)然后删除它,该怎么做?
下面的答案告诉了我如何创建一个临时文件。如果我只想创建一个文件(tmp.txt)然后删除它,该怎么做?
以下是一个完整的示例:
#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)
获取详细信息。
也许这可以帮助你
FILE * tmpfile ( void );
http://www.cplusplus.com/reference/clibrary/cstdio/tmpfile/
打开一个临时文件
创建一个临时二进制文件,以更新模式(wb+模式--参见fopen的详细信息)打开。文件名保证与任何其他现有文件不同。当流关闭(fclose)或程序正常终止时,自动删除所创建的临时文件。
另请参阅
char * tmpnam ( char * str );
生成临时文件名
生成一个包含文件名的字符串,该文件名与任何现有文件不同。可以使用此字符串创建临时文件,而不会覆盖其他现有文件。
tmpfile
,但现在懒得检查。 - Ciro Santilli OurBigBook.comhttp://msdn.microsoft.com/en-us/library/aa363875%28VS.85%29.aspx
atexit()
删除该文件。您可以使用C++的<iostream>
或C的FILE *
(<cstdio>
)来创建文件。不完全标准但广泛可用的mkstemp()
函数创建一个文件并告诉您其名称以及返回一个文件描述符(第三个I/O机制);您可以使用fdopen()
函数将文件描述符转换为FILE *
。FILE *
,然后查看@Tom建议的tmpfile()
。Boost
提供:auto temporary_file = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path();
假设您已成功创建了临时文件,那么您可以使用remove函数来删除它。
该函数在stdio.h中声明 -
#include <stdio.h>
int remove(const char *pathname);
#include<stdio.h>
int main()
{
if(remove("myfile.txt") == -1)
{
fprintf(stderr,"Remove failed");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
希望现在你已经知道如何创建临时文件,这应该解决了你的问题。 希望能有所帮助。