2012-01-11 11 views
0

ファイルの読み込みに問題があります。私が間違っていることを理解できません。パスを与える方法が間違っているかもしれませんが、私はしません。知っている。C++で問題を開くファイル

/* 
output: 
Where is the conversion table ? 
/Users/awiebe/Documents/Langara\ Assignments/CPSC1160/CURRENCYCODES.txt 
Unable to open file 
*/ 


StringFloatMap readFile(string path) 
{ 
    //fstream filestr ("test.txt", fstream::in | fstream::out); 
    ifstream filestr; 
    const char* cPath = path.c_str(); 
    filestr.open(cPath); 

    if (filestr.is_open()) 
    { 
     filestr.close(); 
    } 
    else 
    { 
     cout << "Unable to open file" << endl; 
    } 
/*…*/ 
} 
+1

cout << "Opening" << cPath << endl; –

+1

この関数をフルパスで( '/ Users/awiebe/Documents/test.txt'のように)呼び出してみてください。また、ファイルが存在し、書き込み権限があることを確認してください。 –

+0

本当に書き込み権限? –

答えて

0

CPATH変数が必要(ただし、デバッグのために、多分良い)

私は失敗メッセージを印刷することをお勧めされていません。あなたが(例えば、あなたがあなたのファイル名に\を削除することができます)パスにスペース文字をエスケープする必要はありません

#include <cstring> 
#include <cerrno> 

cout << "Unable to open file:" << errno << ':' << strerror(errno) << std::endl; 
1

を追加します。

+0

どのエスケープ文字 - その単なるコメント –

+2

@AdrianCornish:トップのコメントは、プログラムを実行した後の出力です(「どこに変換テーブルがありますか?」というメッセージが表示されます) )。その場合、alanxzは正しいです。スペースは対話型プロンプトで入力されたときに\で始めるべきではありません。最も簡単な解決策は、ディレクトリ名のスペースを使用することを避けることです。 –

0

は単に "\" を取り除くと彼にパスを与えます: 例:

/ユーザ/ awiebe /ドキュメント/ランガラ割り当て/ CPSC1160/CURRENCYCODES.txt

ますので、文字列クラスを使用すると、空白にエスケープシーケンスを使用する必要はありません。

関連する問題