输入和输出文件流在 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";
}
控制台打印 hello
但 hello.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";
}
我在处理输入和输出文件流时遇到了以下观察结果,我很困惑。谁能告诉我为什么会这样:
我在桌面上保存了一个名为 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";
}
控制台打印 hello
但 hello.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";
}