Oracle のVirtualBoxを使用して、仮想マシンのLubuntuでこれを実行しています。それが何かに影響するとは思いませんが、言及する価値があると思いました。
次の関数によって返される文字列の末尾に追加された奇妙な記号からエラーが表示されているようです。
inline std::string f_settings_get(std::string val){
int index=0;
while(strcmp(val.c_str(),f_settings[0][index].c_str())!=0){
index++;
};
// For debugging purposes - printf("\n%s\t%s",f_settings[0][index].c_str(),f_settings[1][index].c_str());
return f_settings[1][index];
}
この関数に問題は見られないため、変数に格納されているデータが原因である可能性があります。
を使用してプログラムでファイルを開こうとしfopen
ましたが、タイトルに記載されているエラーに遭遇しました。コードは Windows で完全に動作します (そして、各オペレーティング システムの/
とを説明しました)。\
ただし、Linux で実行すると、完全にコンパイルされますが、ファイルが存在しないというエラーが発生します。オンラインで確認したところ、他の人が抱えていた次のような問題がいくつか見つかりました。
提供されたPythonスクリプトを使用して最初のファイルをチェックアウトし、新しい名前でファイルを再作成しました。それは機能しませんでした (そして、Python スクリプトはファイル名が適切であることを示しました)。
すべてのアクセス許可を 777 に設定しましたがchmod -R 777 clesis
、うまくいきませんでした (ただし、ファイルが存在しないと言われたため、アクセス許可の問題であるとは予想していませんでした)。
完全なパスが既に呼び出されており、パスを再確認しました。正しいです。
最後に、次のコードを実行して、(a) ファイルが存在すること、(b) 正しいファイルを開こうとしたことを再確認しました。
tmp_s="";
tmp_s = homeDir+binP+f_settings_get("xxxxx"); // Note, you can easily get whatever variable you want using either f_settings_get or num_settings_get
tmp_file = fopen(tmp_s.c_str(), "r+");
printf("\n Running the following command: /home/xxxxx/programming/xxxxx/bin\n");
std::system("ls -l /home/xxxxx/programming/xxxxx/bin");
getWait();
printf("\n Tried to open: %s", tmp_s.c_str());
if (tmp_file == NULL){
printf("\n");
perror("Error loading dimensions.sim");
printf("Press enter to exit...");
getWait();
exit(1);
}
そして、出力は次のようになります(検閲して申し訳ありません。ユーザー名とフォルダーのスペルが同じであることを保証します):
出力は次のとおりです。
Filenames Loaded...
Loading Settings from sim file...
++++++++++++++++++++++++++++++++++++++++++++++++++ Settings Loaded...
Loading System Dimensions from sys file...
--------------------------------------------------
Running the following command: /home/xxxxx/programming/xxxxx/bin
total 636
-rwxrwxrwx 1 xxxxx xxxxx 958 Jul 25 20:59 dimensions.sim
Tried to open: /home/xxxxx/programming/xxxxx/bin/dimensions.sim
Error loading dimensions.sim: No such file or directory
Press enter to exit...
ファイル パスが「bin/dimensions.sim」または「/home/xxxxx/programming/xxxxx/bin/dimensions.sim」として直接指定されている場合、正しく動作します。これは私を混乱した結論に導きます。tmp_s
a から astd::string
への変換のどこかでc_str
、間違ったディレクトリ パスにつながる問題があります。ただし、これは私が使用している他のファイルでは発生せず、Windows マシンでこの問題が発生したことはありません。したがって、私はそれを引き起こしている可能性があるものについて混乱しています。
最後にもう 1 つ観察します。とにかく、変換はprintf("tmps = %s",tmp_s.c_str());
. そして、それは「変」ではないことがはっきりとわかります。