2012-04-04 15 views
2

シミュレーションの最後に、データファイルに追加された行としていくつかの結果を書きたいと思います。私が使用しているコードは、outFilestd::ofstreamとして正しく割り当てられていて、がまだ存在しないファイルへの有効なパスを含むstd::stringであると仮定し、そのファイルに出力される変数がちょうどintシミュレーション中に値を取得するタイプ。`ofstream`の使用はファイルの作成も書き込みもしません。

outFile.open(output_file.c_str(), std::ios::out | std::ios::app); 
outFile << num_nodes << ", " << tot_s << ", " << tot_c << ", " << tot_d << std::endl; 
outFile.close(); 

私はそれが正しくofstream::is_open()機能でファイルを開くかどうかをチェックしました、それはfalseを返します。しかし、私は理由を理解できません。私は多くの異なるファイル名とディレクトリパスで試してみましたが、それらはすべてチェックされており、有効です(打ち間違いはありません)

書き込まれているファイルは、すべての時間ファイル、私はアクセス許可の問題になる可能性があります表示されません。権限の問題であれば、どうすれば確認できますか?

それ以外の場合、ファイルに書き込むことを妨げる原因は何ですか?

を追加しました:

はコメントにフォローアップ、perror()への呼び出しを追加した後、それは「そのようなファイルやディレクトリはありません」というエラーが表示されます。問題のファイルのパスは次のとおりです。

/home/ely/Desktop/Evolutionary_Dynamics/GamesOnCycle/data/test.data 

私は、このファイルを作成することにしたい、そしてそのパス内のすべてのディレクトリが存在し、それがすべてなど、正しく入力だ、とGamesOnCycleフォルダとは奇妙な権限の問題が存在しませんまたはそのデータサブフォルダ。それはLinuxシステム(Ubuntu 11.04)であることに注意してください。フォワードスラッシュはファイルパスに対して正しいですが、C++にはw.r.tを持っていなければなりません。ファイルパス。

+2

を参照してください。それでもエラーメッセージを取得するためにofstream.open後にそれを使用することができ、Cスタイルです。 – keety

+1

パスで二重バックスラッシュを使用していますか? – chris

+0

これはLinuxシステム上にあるので、パスにはすべてスラッシュが付きます。これは、ユーザー入力から読み込んだときにファイル名を正しく表示するので、少なくとも 'std :: string'に正しいパスがあります。 – ely

答えて

3

これは、いくつかの理由により起こりうる。

1)ファイルは既に開いています。

2)ファイルパス内のすべてのディレクトリが作成されません。

3)ファイルのアクセス許可が不足しています。追加の参考のために

、)(perrorはもののWhen will ofstream::open fail?

2

これは悪いかもしれませんが、ウィンドウズやLinux上にいますか?あなたのファイルパスのためのウィンドウがあなたの文字列に二重 "\"で定義されているのですか?ただ一つの場合、あなたはあなたが思っているあなたのパスに文字を入れていません。安全のために、 "/"文字を使用してください。

だから、この持っていた場合:有効なパスではありません

string pathname = "C:\Users\me\Desktop"; 

を。 "\ U"、 "\ m"、 "\ D"を文字列にエスケープしています。 "/" エスケープ文字ではありません

string pathname = "C:\\Users\\me\\Desktop"; 

または

string pathname = "C:/Users/me/Desktop"; 

:あなたはこれを必要とするだろう。

これは私にはおそらくそうです。

+0

投稿を更新しました。私はUbuntuにいる。 – ely

関連する問題