当我们在不打开文件的情况下写入文件时,里面会发生什么?

What happens inside when we write to a file without opening it?

提问人:Debanjan Mondal 提问时间:1/28/2021 最后编辑:Debanjan Mondal 更新时间:3/3/2021 访问量:405

问:

例如,如果我写入一个文件,而该文件不在那里,我<<给定的要写入的字符串去了那里?

int main(int argc, char** argv) {
    fstream my_file;

    if (argc>1)
    {
            my_file.open("my_file.txt", ios::out);
            cout << "File1 created successfully!"<<endl;
    }


    my_file << "Guru99";
    my_file.close();
    cout<<"Done"<<endl;

    return 0; }

它会把它放在内存中还是放在 dev/null 类型的区域?

C++ 文件 文件处理 IOTream

评论

0赞 paddy 1/28/2021
如果文件未打开,则流将处于错误状态,并且您尝试写入的任何内容都将失败。
0赞 Debanjan Mondal 1/28/2021
如果我运行代码,它不会给出任何错误,我不想写任何东西(这很好用)。只是好奇如果不打开和使用<<会堵塞内存中的任何内容
3赞 G.M. 1/28/2021
回复:您需要检查错误"it does not give any error"
1赞 paddy 1/28/2021
不,就像我说的,流将处于错误状态,不会在任何地方存储任何内容。换句话说,将返回 .另外,会返回.您的程序不需要自动显示任何类型的实际错误或以任何其他方式握住您的手。这种行为是有据可查的,程序员可以按照他们的选择处理错误。具体而言,在这些情况下,不会引发任何异常。my_file.fail()truemy_file.is_open()false
0赞 Debanjan Mondal 1/28/2021
好的,知道了。但是有什么办法可以以这种方式卡住memeory吗?是否有任何缓冲区,它持续存储给定的数据以打印在内存中?或者它只是忽略要打印的给定字符串并将错误标志设置为 true?

答:

0赞 vitaut 3/3/2021 #1

如果您尝试写入未与文件关联(未打开)的对象,则您的输出将被丢弃,并将设置:fstreamfailbit

如果无法生成输出,请设置 failbit,如果在此流的异常掩码中启用了 failbit 上的异常,则抛出 ios_base::failure。

https://en.cppreference.com/w/cpp/named_req/FormattedOutputFunction 所述。