尝试使用 fstream 在 C++ 中读取文件。 但是 is_open() 函数始终返回 0 结果,而 readline() 不读取任何内容。请参阅下面的代码片段。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
string line;
ifstream myfile("D:\xx\xx\xx\xx\testdata\task1.in.1");
if (myfile.is_open()) {
while (getline(myfile, line)) {
cout << line << '\n';
}
myfile.close();
}
else
cout << "Unable to open file";
return 0;
}
最佳答案
你认为你正在打开D:\<somepath>\testdata\task1.in.1
但实际上你正试图打开 D:\<somepath><tabulation char>estdata<tabulation char>ask1.in.1
自 \t
被解释为制表。
(比如 \n
是 printf("hello world\n");
中的换行符)
(\x
也很特别,顺便说一句,这不是真正的路径,否则您会遇到另一个错误:error: \x used with no following hex digits
可能会更好地与您交谈!)
你必须像这样转义反斜杠:
D:\\xx\\xx\\xx\\xx\\testdata\\task1.in.1
Windows 也接受这样的路径,更方便,除非你想用 cd
生成批处理脚本需要反斜杠的命令或类似命令( /
在批处理命令中用作选项开关):
D:/xx/xx/xx/xx/testdata/task1.in.1
正如 NathanOliver 所说,如果您的编译器启用了 C++11 模式(或使用 --std=c++11
),您可以使用 raw 前缀
R"(D:\xx\xx\xx\xx\testdata\task1.in.1)"
最后一句话:逃避它的肮脏方式:
D:\Xx\Xx\Xx\Xx\Testdata\Task1.in.1
在那种情况下使用大写就可以了
- 因为windows不区分大小写
- C 会让反斜杠保持原样。
但这只是运气。很多人在没有意识到他们非常接近错误的情况下这样做了。 顺便说一句,很多人将 Windows 路径大写(正如在本网站中经常看到的那样),因为他们注意到他们的路径在不知道为什么的情况下不能使用小写字母。
关于c++ - C++ 中的 is_open() 函数始终返回 0 值,而 getLine(myFile, line) 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39154374/