假设我在记事本上创建了一个名为Numbers.txt的文档。我将数字6放在记事本上并关闭。然后我输入以下代码段。
#include< iostream>
#include < fstream >
int main()
{
fstream sample;
sample.open("Numbers.txt", ios::in | ios :: out);
if(sample)
{
int number;
sample >> number;
sample << "555";
sample.close();
}
}
因为有时它打印出555,有时它打印出来6.没有一致性。换句话说,输出到底是如何发送到文件的。有人能解释一下原因吗?
答案 0 :(得分:1)
当您为输入和输出打开文件时,当您在读取和写入该文件之间切换时,必须执行seek
。我引用标准来显示在哪里,但引用的引用集得到相当长的时间(一直到C标准)。基本上,它表示读取和写入就像使用了C库中的函数一样,而C标准表示在为两者打开的流上切换输入和输出时需要进行搜索。
答案 1 :(得分:0)
我不知道为什么fstream对你来说并不一致,但是如果你将输入文件流与输出文件流分开,它对我来说是一致的;
<强>的main.cpp 强>
std::ifstream inputFileStream("sample.txt");
std::ofstream outputFileStream("sample.txt",std::ios_base::app); // append to file
if(inputFileStream.good() && outputFileStream.good()){
int number;
inputFileStream >> number;
outputFileStream << "555";
inputFileStream.close();
outputFileStream.close();
}
sample.txt 的字符为&#39; 6&#39;在它开始。
这就是它的样子;
c:\Users\James\Desktop>type sample.txt
6
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
6555
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
6555555
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
6555555555
如果你实际上并不想追加,删除那个标志,那么每次没有附加的文件输出只是单个&#34; 555&#34;,这仍然是一致的;
c:\Users\James\Desktop>type sample.txt
6
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
555
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
555
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
555
如果你想知道为什么你对fstream的使用不是比你想要的另一种方式更有效,或者我误解了一些东西,请告诉我,如果是的话,我很乐意删除这个答案并没有真正帮助你。