必须是一个简单的答案,但我不知所措,这是返回错误的代码。我尝试过使用和不使用起始斜杠。
我不知道完整路径,我希望它是exe的相对路径,这就是相对路径。我试图逃避斜线。
我的问题是,当文件存在时,我得到“错误打开文件”。为什么会失败?
ifstream myFile("/LOGS/ex090716.txt");
if (myFile.fail()) {cout << "Error opening file";}
else
{
cout << "File opened... \n";
//string line;
//while( getline(myFile, line) ) {
// cmatch results;
// regex rx("(p|q)(=)([^ %]*)");
// regex_search(line.c_str(), results, rx);
// string referringWords = results[3];
//}
myFile.close();
}
谢谢
答案 0 :(得分:1)
究竟是什么问题?!如果您想测试文件是否打开,请使用is_open()
。
答案 1 :(得分:0)
检查是否设置了failbit或badbit。
如果设置了failbit或badbit,则该函数返回true。当在输入操作期间发生除了到达文件结尾之外的某些错误时,至少设置其中一个标志。
ifstream myFile("/LOGS/ex090716.txt");
if (!myFile.fail()){cout << "Error opening file";}
else {
cout << "File opened... \n";
}
myFile.close();
OR
ifstream myFile("/LOGS/ex090716.txt");
if (!myFile){cout << "Error opening file";}
else {
cout << "File opened... \n";
}
myFile.close();
答案 2 :(得分:0)
摆脱领先的斜杠
ifstream myFile("LOGS/ex090716.txt");
//...
答案 3 :(得分:0)
相对路径:不要以/
相对于程序目录而不是cd:如果通过PATH找到程序,则不能只使用argv [0]。我不确定你能做什么便携。您可能希望重复解析符号链接。
在linux上,文件/ proc / self / exe上的readlink()有效。
在Windows上,这应该可行:
TCHAR path[2048] = {0};
GetModuleFileName( NULL, path, 2048 );
const string exe_path( path );
const string exe_dir( exe_path.substr(0, exe_path.rfind("\\") + 1 );
一般情况下,您应该使用http://www.boost.org/doc/libs/1_40_0/libs/filesystem/doc/index.htm
答案 4 :(得分:0)
perror()可以相对容易地给你一个问题的详细描述
int fd = open("/LOGS/ex090716.txt", O_RDONLY);
if(fd == -1) {
perror("cannot open file");
exit(1);
}
然而,这不是c ++'ish。