问题打开文件c ++

时间:2009-09-04 03:28:56

标签: c++ file ifstream

必须是一个简单的答案,但我不知所措,这是返回错误的代码。我尝试过使用和不使用起始斜杠。

我不知道完整路径,我希望它是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();
  }

谢谢

5 个答案:

答案 0 :(得分:1)

究竟是什么问题?!如果您想测试文件是否打开,请使用is_open()

答案 1 :(得分:0)

fail()

检查是否设置了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。