【问题标题】:clear data inside text file in c++用c ++清除文本文件中的数据
【发布时间】:2013-06-06 15:29:15
【问题描述】:

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

【问题讨论】:

标签: c++ fstream


【解决方案1】:

如果您只是使用 truncate 选项打开文件进行写入,您将删除内容。

std::ofstream ofs;
ofs.open("test.txt", std::ofstream::out | std::ofstream::trunc);
ofs.close();

http://www.cplusplus.com/reference/fstream/ofstream/open/

【讨论】:

  • 谢谢 .. 当我运行此行或关闭文件时,此选项是否会删除内容?
  • 用std::ofstream::trunk打开时内容被删除。
  • ofstream 不需要 std::ofstream::out 标志,因为它默认存在。
  • @HaSeeBMiR,这是不正确的。确实需要在这里同时指定 out 和 trunc 标志,否则它不起作用。是的 out 标志是默认的,但是一旦传入 trunc 标志,它就会被覆盖。试一试。
  • 这就是为什么你必须使用按位或'|'让两者都工作。
【解决方案2】:

据我所知,只需在不附加模式的情况下以写入模式打开文件就会删除文件的内容。

ofstream file("filename.txt"); // Without append
ofstream file("filename.txt", ios::app); // with append

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

【讨论】:

  • 这是我找到的最简单的答案!
  • 这两种解决方案之间一定存在一些文件系统差异。也许 truncate 确保从文件系统中完全删除位(或者实现应该这样做?)
【解决方案3】:

如果你设置了 trunc 标志。

#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();”手术。如果您不这样做,则无法确定您是 trunc 还是只是应用程序来请求文件。根据文件类型,您可能只是附加在文件上,这取决于您的需要可能无法满足其目的。一定要调用“.close();”明确说明您要替换的 fstream。

【讨论】:

    【解决方案4】:

    删除文件也会删除内容。 见remove file

    【讨论】:

    • 这个答案比 PureW 提出的答案代码更少(单行!)和更好的可读性。
    • 我对问题的解释是清除文件内容,而不是删除文件。
    • @PureW:删除文件是清除内容的一种方法。
    • 它是从磁盘中清除内容,还是只是删除指向该文件的文件描述符?我认为它只是后者,它实际上并没有从磁盘上切碎或擦除文件。
    • 它的作用取决于操作系统。大多数文件系统会将文件分配表 (FAT) 中的文件标记为已删除。包含数据的实际扇区不会改变。如果您需要安全删除,则必须在互联网上搜索“c++ 安全文件擦除”。
    【解决方案5】:

    你应该创建一个函数来清除文件的所有数据,然后运行它。

    void clear()
    {
        ofstream file("fileout.txt");
        file<<"";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      相关资源
      最近更新 更多