6

シミュレーションの最後に、いくつかの結果をデータファイルに追加された行として書き込みたいと思います。私が使用しているコードは次のとおりです。これは、outFileとして正しく割り当てられたものでありstd::ofstream、まだ存在していないファイルへの有効なパスが含まれており、ファイルに出力される変数output_fileは、シミュレーション中の値。std::stringint

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 ++にwrtファイルパスが必要なものがない場合を除いて、ファイルパスのスラッシュは正しいことに注意してください。

4

2 に答える 2

7

これは、いくつかの理由で発生している可能性があります。

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

2)ファイルパス内のすべてのディレクトリが作成されているわけではありません。

3)ファイル権限の欠如。

追加のリファレンスについては、いつofstream ::openが失敗するかを参照してください。

于 2012-04-04T21:12:31.813 に答える
3

これは悪いように聞こえるかもしれませんが、WindowsまたはLinuxを使用していますか?Windowsの場合、ファイルパスとして、文字列に二重の「\」を使用して定義していますか、それとも1つだけですか。たった1人の場合、あなたは自分が思っているようなキャラクターを自分の道に入れていません。安全のため、「/」文字を使用してください。

だからあなたがこれを持っていたら:

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

それは有効なパスではありません。「\U」、「\ m」、「\D」を文字列にエスケープしています。あなたはこれを必要とするでしょう:

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

また

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

「/」はエスケープ文字ではありません。

それは私にはありそうなことです。

于 2012-04-04T21:02:42.750 に答える