我有一个菜单可以根据用户的选择启动一些方法。然而,其中两种方法无法正常工作,我不知道为什么。 这是他们菜单的一部分:
case 2:
{
string fileName;
cout << "Which file to read?:";
cin>>fileName;
this->ReadFromFile(fileName);
break;
}
case 3:
{
string fileName;
cout << "Enter name for the file:";
cin>>fileName;
this->WriteToFile(fileName);
break;
}
以下是方法:
void ReadFromFile(string file)
{
string line;
ifstream rfile ("FileSystem/" + file);//open file for reading
if (rfile.is_open())
{
while(getline(rfile, line))
{
cout << line << endl;
}
}
else
{
cout << "An error occurred when tried to read from this file." << endl;
}
rfile.close();
_getch();
}
void WriteToFile(string fileName)
{
ofstream myFile;
ifstream exists (fileName);//open read stream to check if file exists
if(exists)//returns true if file can be opened and false if it cant
{
exists.close();//close the stream
myFile.open(fileName, ios_base::app);// open file for reading(ostream)
}
else
{
exists.close();
CreateFile(fileName);//file doenst exists, so we create one and list it in the file tree
myFile.open("FileSystem/" + fileName, ios_base::app);// open file for reading(ostream)
}
if(myFile.is_open())
{
string input;
cout << "start writing and press enter to finish. It will be done better later." << endl;
cin>>input;
myFile << input;
}
else
{
cout<<"An error occurred when tried to open this file."<<endl;
}
myFile.close();
_getch();
}
现在这是有趣的部分。当我尝试将某些东西写入文件时,我打开它并不重要:'ios_base :: app'或'ios:app'它只是重写它。但它甚至不能正确地做到这一点。如果我有一个像'我这是我的'空格的行。例如,它只写第一个单词,这里是'Hi'。 因此,如果我决定阅读该文件,那么首先发生的事情就是它说该文件无法被禁用,甚至在它要求我输入名称之前。这发生在前3次尝试然后阅读神奇地起作用。 在过去的两个小时里,我已经把头埋进去了,我仍然无法理解发生了什么。任何人都可以向我解释一下,并告诉我我的错误吗?
答案 0 :(得分:0)
string input;
cout << "start writing and press enter to finish. It will be done better later." << endl;
cin>>input;
myFile << input;
在上面的行中,cin>>input
将停止在空格处阅读。您应该使用std::getline
代替。另请参阅this answer。