【问题标题】:File output stops after outputting 8192 characters输出 8192 个字符后文件输出停止
【发布时间】:2013-06-19 06:29:53
【问题描述】:

我只是在尝试一些文件处理的东西。
我有一个最大大小约为 100 000 个字符的数组,我已经让它填充了大约 11000 个字符。

我尝试将数组输出回文件。
但我意识到文件在一个奇怪的地方被切断了。
所以我查看了实际的数组,并意识到文件输出只到了它的第 8192 个字符。 (str[8191])

std::ostream &operator << (std::ostream &os, Encrypt &s) {
    if(s.c_count == 0) { 
        cerr << "No ciphertext available!" << endl; os << "";
    }
    else 
        for(int i=0; i<s.c_count; i++) { 
            os << s.txt.m[i]; 
    }

    return os;
}

这是我的 Encrypt 类的运算符函数。

OutputName = "OUT.txt";
fstream ofile(OutputName.c_str(), ios_base::app);
ofile << encrypt;

我的第 8193 个字符只是一个普通字符,它不像空字符或任何东西。为什么会发生这种情况,我该如何解决这个问题?

提前致谢!

+) 当我做同样的事情,然后做

cout << encrypt;

而不是,

ofile << encrypt;

一切正常。

【问题讨论】:

  • 给我们一些有问题的代码
  • @undercover 我现在的代码很长,我不确定需要哪些代码。
  • @Haxify 我认为它也应该在您使用 flush() 流而不是立即关闭它时起作用。 close() 强制将任何待处理的数据从流写入文件。
  • flush() 将缓冲区的内容写入目标,并使缓冲区为空以便进一步存储数据,并且不会关闭流。这意味着您仍然可以向流中写入更多数据。但是 close() 会永久关闭流。如果要写入更多数据,则必须再次重新打开流并附加数据
  • 所以 flush() 会是这种情况下更好的解决方案

标签: c++ file-io console


【解决方案1】:

如果您想永久关闭流,请尝试此操作。您必须再次重新打开流并附加数据:

OutputName = "OUT.txt";
fstream ofile(OutputName.c_str(), ios_base::app);
Outputname.close();
ofile << encrypt;

或者如果你想让缓冲区为空以进一步存储数据并且关闭流:

OutputName = "OUT.txt";
fstream ofile(OutputName.c_str(), ios_base::app);
Outputname.flush();
ofile << encrypt;

我不是 C++ 程序员,但我假设所有流的字符限制为 8192 字节。出于性能原因,在写入文件时使用 512 字节的倍数是有意义的,8kb 似乎足够合理。

【讨论】:

    猜你喜欢
    • 2018-10-28
    • 2016-02-22
    • 2017-03-21
    • 2012-05-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2022-01-21
    • 2022-08-14
    相关资源
    最近更新 更多