输入和输出文件流在 C++ 中是如何工作的

how exactly input and output file streams work in c++

我在处理输入和输出文件流时遇到了以下观察结果,我很困惑。谁能告诉我为什么会这样:

我在桌面上保存了一个名为 hello 的 txt 文件,其中包含以下文本:

Hello my name is xyz

接下来,我运行下面的代码:

    #include <iostream>
    #include <fstream>
    #include <string>

    int main()
    {
    std::fstream strm;
    strm.open("C:\Users\SWARAJ SONAVANE\Desktop\hello.txt");
    if (strm.fail())
    {
        std::cout << "failed....  :(\n";
    }
    //std::string p;
    //strm >> p;
    //std::cout << p;
    strm << "random text";
    }

运行 这段代码后 hello.txt 文件的内容是:

random textme is xyz

现在我 运行 原始 hello.txt 文件中的以下代码

    #include <iostream>
    #include <fstream>
    #include <string>

    int main()
    {
    std::fstream strm;
    strm.open("C:\Users\SWARAJ SONAVANE\Desktop\hello.txt");
    if (strm.fail())
    {
        std::cout << "failed....  :(\n";
    }
    std::string p;
    strm >> p;
    std::cout << p;
    strm << "random text";
    }

控制台打印 hellohello.txt 文件的内容保持不变。

谁能解释一下,将流读入字符串有什么区别?

如果你想知道流在 C++ 中是如何工作的,那么你需要一个 reference work(也许还需要一个教程),显然它比这里可以解释的要复杂得多。

您发现的原因是如果您从读取切换到写入(反之亦然),则必须在进行切换之前执行定位或刷新操作。试试下面的代码

int main()
{
    std::fstream strm;
    strm.open("C:\Users\SWARAJ SONAVANE\Desktop\hello.txt");
    if (strm.fail())
    {
        std::cout << "failed....  :(\n";
    }
    std::string p;
    strm >> p;
    std::cout << p;
    strm.seekp(0);        // position the stream at the beginning
    strm << "random text";
}