在C++中清空文本文件内的数据

51

我正在使用C++进行编程。在我的代码中,我创建了一个文本文件,并使用流将数据写入文件并从文件中读取,当我完成所需的序列后,我希望清除txt文件中所有的数据。有人能告诉我清除txt文件数据的命令吗?谢谢


希望这能对你有所帮助:https://dev59.com/Vm445IYBdhLWcg3wg6xn - Shivam Singh
5个回答

82

1
谢谢..这个选项是在我运行这一行代码时删除内容还是在关闭文件时删除呢? - Zeyad
当您使用std::ofstream::trunk打开时,内容会被删除。 - PureW
3
ofstream不需要使用std::ofstream::out标记,因为该标记已经默认存在。 - Haseeb Mir
7
@HaSeeBMiR,那是不正确的。在这里需要指定 out 和 trunc 标志,否则它将无法工作。是的,out 标志是默认的,但一旦传入 trunc 标志,它就会被覆盖。试试看吧。 - Murphy Meng
在阅读代码多年后,显式(的编码)大多数时候比默认要好 :) - PureW
显示剩余2条评论

13
据我所知,仅以写模式打开文件而非附加模式将会擦除文件的内容。
ofstream file("filename.txt"); // Without append
ofstream file("filename.txt", ios::app); // with append

第一个版本会将位置位放在开头并清除所有内容,而第二个版本会将位置位放在文件结束位上并从那里开始写入。


这是我找到的最简单的答案! - Amin Guermazi
这两个解决方案之间可能存在某些文件系统差异。也许truncate确保从文件系统完全删除位(或者实现应该这样做?) - Kalen

7
如果您设置了截断标志。
#include<fstream>

using namespace std;

fstream ofs;

int main(){
ofs.open("test.txt", ios::out | ios::trunc);
ofs<<"Your content here";
ofs.close(); //Using microsoft incremental linker version 14
}

我在自己的实际编程需求中进行了彻底测试。一定要执行".close();"操作。如果不这样做,就无法确定您是否截断或者只是追加到文件的开头。根据文件类型,您可能只是追加到文件上,这根据您的需求可能无法达到目的。一定要显式调用要替换的fstream上的".close();"。


5

这个答案的代码更少(只有一行!)且比PureW提出的答案更易读。 - Tim Kuipers
16
我理解这个问题的意思是要清空文件内容,而不是删除文件本身。 - PureW
@PureW:删除文件是清空内容的一种方法。 - Thomas Matthews
它是清除磁盘上的内容,还是只是删除指向文件的文件描述符?我认为它只是后者,它实际上并没有从磁盘上擦除或清除文件。 - K. Frank
它的作用取决于操作系统。大多数文件系统将在文件分配表(FAT)中将文件标记为已删除,但实际包含数据的扇区不会被修改。如果您需要安全删除,则必须在互联网上搜索“c++ secure file erase”。 - Thomas Matthews

0
你应该创建一个清除文件中所有数据的函数,然后运行它。
void clear()
{
    ofstream file("fileout.txt");
    file<<"";
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接