C++ 为什么不是';我的fstream不能正确打开吗?

C++ 为什么不是';我的fstream不能正确打开吗?,c++,fstream,getline,C++,Fstream,Getline,我觉得这是一个愚蠢的问题,但我似乎不明白为什么我的文件没有打开。起初,我尝试单独传递文件名,因为它在我的工作目录中,当这不起作用时,我提供了整个路径,这也不起作用。我的文件在下面的代码中无法打开有什么原因吗?这可能是我错过的一些非常简单的东西,我想换一双新的眼睛可能会有所帮助 没有错误代码,因为这是一个运行时错误。当我调试时,我的代码不会超过if(f.is_open())行。我错过什么了吗?我的路径应该是正确的,因为我直接从文件资源管理器复制粘贴了它 欢迎提供任何帮助,如有任何解释,我们将不胜感

我觉得这是一个愚蠢的问题,但我似乎不明白为什么我的文件没有打开。起初,我尝试单独传递文件名,因为它在我的工作目录中,当这不起作用时,我提供了整个路径,这也不起作用。我的文件在下面的代码中无法打开有什么原因吗?这可能是我错过的一些非常简单的东西,我想换一双新的眼睛可能会有所帮助

没有错误代码,因为这是一个运行时错误。当我调试时,我的代码不会超过if(f.is_open())行。我错过什么了吗?我的路径应该是正确的,因为我直接从文件资源管理器复制粘贴了它

欢迎提供任何帮助,如有任何解释,我们将不胜感激

注意:我的substr逻辑可能是错误的,但不要担心这部分代码


如果您在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);
            }
        }
    }