2

簡単な答えでなければなりませんが、私は途方に暮れています。エラーを返すコードは次のとおりです。開始スラッシュの有無にかかわらず試しました。

フルパスがわからないので、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();
  }

ありがとうございました

4

5 に答える 5

1

あなたの問題は正確には何ですか?! ファイルが開いているかどうかをテストしたい場合は、 を使用しますis_open()

于 2009-09-04T03:32:16.550 に答える
1

先頭のスラッシュを取り除く

ifstream myFile("LOGS/ex090716.txt");
//...
于 2009-09-04T04:17:27.337 に答える
0

不合格()

failbit または badbit が設定されているかどうかを確認します。

failbit または badbit が設定されている場合、関数は true を返します。これらのフラグの少なくとも 1 つが、入力操作中に End-Of-File に到達する以外のエラーが発生したときに設定されます。

ifstream myFile("/LOGS/ex090716.txt");
  if (!myFile.fail()){cout << "Error opening file";}  
  else  {   
    cout << "File opened... \n";
   }
myFile.close(); 

また

ifstream myFile("/LOGS/ex090716.txt");
  if (!myFile){cout << "Error opening file";}  
  else  {   
    cout << "File opened... \n";
   }
myFile.close();
于 2009-09-04T03:38:07.463 に答える
0

相対パス: から始まらないでください/

cd ではなくプログラム dir に関連: プログラムが 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を使用する必要があります。

于 2009-09-04T04:17:29.833 に答える
0

perror() は、問題の詳細な説明を比較的簡単に提供できます

int fd = open("/LOGS/ex090716.txt", O_RDONLY);
if(fd == -1) {
    perror("cannot open file");
    exit(1); 
}

ただし、これは C++ 風ではありません。

于 2009-09-04T06:19:02.547 に答える