我对 file_pointer>>string_var 有疑问;有人可以澄清一下吗?
I have issues with file_pointer>>string_var; can someone please clarify?
我正在研究 C++ 文件概念。在下面的程序中,我试图了解如何读取和写入文件。
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
fstream myfile;
string str1;
myfile.open("H:/input_file.txt");
myfile<<"test1 writing files"<<" ";
myfile>>str1;
cout<<str1<<endl;
myfile<<"test2 append writing files"<<" ";
myfile>>str1;
cout<<str1<<endl;
myfile.close();
return 0;
}
我希望文件包含:"test1 writing files test2 overwriting files"。但是为什么文件只有:"test1 writing files"。我也不能在控制台上有任何输出(str1 的值)。我对 operator>> 的概念以及与 FILE I/O 相关的任何缓冲区的理解很差。谁能给我一个清晰的认识。
1) 在您的示例中,您应该移动 "cursor position" 以开始读取文件:
...
myfile << "test1 writing files" << " ";
myfile.seekg(0);
...
2) 下面的代码(您的代码)将读取 std::string
中的一个单词
myfile >> str1;
因此,在您的示例中,您应该使用循环:
...
string tmp;
while(myfile >> tmp)
str1.append(tmp);
...
我正在研究 C++ 文件概念。在下面的程序中,我试图了解如何读取和写入文件。
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
fstream myfile;
string str1;
myfile.open("H:/input_file.txt");
myfile<<"test1 writing files"<<" ";
myfile>>str1;
cout<<str1<<endl;
myfile<<"test2 append writing files"<<" ";
myfile>>str1;
cout<<str1<<endl;
myfile.close();
return 0;
}
我希望文件包含:"test1 writing files test2 overwriting files"。但是为什么文件只有:"test1 writing files"。我也不能在控制台上有任何输出(str1 的值)。我对 operator>> 的概念以及与 FILE I/O 相关的任何缓冲区的理解很差。谁能给我一个清晰的认识。
1) 在您的示例中,您应该移动 "cursor position" 以开始读取文件:
...
myfile << "test1 writing files" << " ";
myfile.seekg(0);
...
2) 下面的代码(您的代码)将读取 std::string
中的一个单词myfile >> str1;
因此,在您的示例中,您应该使用循环:
...
string tmp;
while(myfile >> tmp)
str1.append(tmp);
...