C++ 为什么不是';我的fstream不能正确打开吗?
我觉得这是一个愚蠢的问题,但我似乎不明白为什么我的文件没有打开。起初,我尝试单独传递文件名,因为它在我的工作目录中,当这不起作用时,我提供了整个路径,这也不起作用。我的文件在下面的代码中无法打开有什么原因吗?这可能是我错过的一些非常简单的东西,我想换一双新的眼睛可能会有所帮助 没有错误代码,因为这是一个运行时错误。当我调试时,我的代码不会超过if(f.is_open())行。我错过什么了吗?我的路径应该是正确的,因为我直接从文件资源管理器复制粘贴了它 欢迎提供任何帮助,如有任何解释,我们将不胜感激 注意:我的substr逻辑可能是错误的,但不要担心这部分代码C++ 为什么不是';我的fstream不能正确打开吗?,c++,fstream,getline,C++,Fstream,Getline,我觉得这是一个愚蠢的问题,但我似乎不明白为什么我的文件没有打开。起初,我尝试单独传递文件名,因为它在我的工作目录中,当这不起作用时,我提供了整个路径,这也不起作用。我的文件在下面的代码中无法打开有什么原因吗?这可能是我错过的一些非常简单的东西,我想换一双新的眼睛可能会有所帮助 没有错误代码,因为这是一个运行时错误。当我调试时,我的代码不会超过if(f.is_open())行。我错过什么了吗?我的路径应该是正确的,因为我直接从文件资源管理器复制粘贴了它 欢迎提供任何帮助,如有任何解释,我们将不胜感
如果您在Windows中,并且直接从资源管理器复制和粘贴,那么您可能忘记了在文件路径中转义斜杠,它应该是
“c:\\foo\\bar.txt”
另外,
open()
是否需要一个char*
,它必须是f.open(path.c_str())
?如果您在Windows中,直接从资源管理器复制和粘贴,那么您可能忘记了在文件路径中转义斜杠,它应该是“c:\\foo\\bar.txt”
另外,
open()
是否需要一个char*
,它必须是f.open(path.c_str())
?如果您在Windows中,直接从资源管理器复制和粘贴,那么您可能忘记了在文件路径中转义斜杠,它应该是“c:\\foo\\bar.txt”
另外,
open()
是否需要一个char*
,它必须是f.open(path.c_str())
?如果您在Windows中,直接从资源管理器复制和粘贴,那么您可能忘记了在文件路径中转义斜杠,它应该是“c:\\foo\\bar.txt”
另外,
open(),我在前面得到了一个额外的花絮:file:///C:/Users/Zachary/Documents/GitHub/Quiz_Maker/TestKey.txt 我忘了把它拿走。这解决了问题,但你的回答为我指明了正确的方向。多谢各位@MrZebraIIRC正向斜杠也应该有效:“c:/foo/bar.txt”
是的,正向斜杠很好,不需要转义或其他英勇的措施。c++11为基本流::open
添加了一个std::string
重载。哦,这很好-我还没有达到c++11的程度。我现在看到了问题:从资源管理器复制粘贴时,我在前面得到了一个额外的花絮:file:///C:/Users/Zachary/Documents/GitHub/Quiz_Maker/TestKey.txt 我忘了把它拿走。这解决了问题,但你的回答为我指明了正确的方向。多谢各位@MrZebraIIRC正向斜杠也应该有效:“c:/foo/bar.txt”
是的,正向斜杠很好,不需要转义或其他英勇的措施。c++11为基本流::open
添加了一个std::string
重载。哦,这很好-我还没有达到c++11的程度。我现在看到了问题:从资源管理器复制粘贴时,我在前面得到了一个额外的花絮:file:///C:/Users/Zachary/Documents/GitHub/Quiz_Maker/TestKey.txt 我忘了把它拿走。这解决了问题,但你的回答为我指明了正确的方向。多谢各位@MrZebraIIRC正向斜杠也应该有效:“c:/foo/bar.txt”
是的,正向斜杠很好,不需要转义或其他英勇的措施。c++11为基本流::open
添加了一个std::string
重载。哦,这很好-我还没有达到c++11的程度。我现在看到了问题:从资源管理器复制粘贴时,我在前面得到了一个额外的花絮:file:///C:/Users/Zachary/Documents/GitHub/Quiz_Maker/TestKey.txt 我忘了把它拿走。这解决了问题,但你的回答为我指明了正确的方向。多谢各位@mrzebrairc前斜杠也应该有用:“c:/foo/bar.txt”
是的,前斜杠很好,不需要转义或其他英勇措施。
void QuizKey::readFromFile(string path)
{
fstream f;
f.open(path);
string line;
if(f.is_open())
{
while(getline(f, line))
{
int periodLocation = line.find(".");
int firstPipe = line.find("|");
int secondPipe = line.find("|", firstPipe);
int thirdPipe = line.find("|", secondPipe);
AnswerSet set;
set.answer = line.substr(periodLocation + 1, firstPipe - periodLocation - 1);
set.two = line.substr(firstPipe + 1, secondPipe - firstPipe - 1);
set.three = line.substr(secondPipe + 1, thirdPipe - secondPipe - 1);
set.four = line.substr(thirdPipe + 1, line.length() - thirdPipe - 1);
key.push_back(set);
}
}
}