0

読み取り用にファイルを開くためにCを使用しています。私はこのコードを持っています:

fp = fopen("./settings.cfg","r");
if (fp != NULL)
    printf("OK");
else
    printf("ERROR");

しかし、私は常にエラーが発生します。

このファイルは、実行可能ファイルが存在するフォルダーにあります。「settings.cfg」だけを書いてみました。何が問題なのでしょう?

4

4 に答える 4

6

perror()ライブラリ自体に何が間違っているかを教えてもらうようにしてください。

fp = fopen("./settings.cfg", "r");
if (fp != NULL)
    printf("OK\n");
else perror("fopen");
于 2012-07-03T12:05:55.950 に答える
3

「実行可能ファイルがあるフォルダー」ではなく、「現在のディレクトリ」でファイルを開いています。

実際、UNIX にはその特定のフォルダーを簡単に見つける方法はありません。Linux では、/proc/[your pid]/exe リンクを readlink() して実行可能ファイルを検索し、ファイル名部分を取り除くことができます。これは多くの場合に機能しますが、ハードリンクのように失敗する特殊なケースもあります。 .

于 2012-07-03T12:05:45.323 に答える
1

どのディレクトリからプログラムを実行しますか? 現在のディレクトリとして存在するディレクトリはなく、環境から継承されます。

ファイルが他の誰かによって所有されており、読み取り権限がないという権利である可能性もあります。

また、ファイル名を再確認してください。これは当たり前のように聞こえますが、とにかく実行してください。

于 2012-07-03T12:03:27.897 に答える
0

開こうとしているファイルが C コンパイル済みファイルと同じディレクトリにある場合は、単純に次のようにする必要があります。

fp = fopen("settings.cfg","r");
if (fp != NULL)
  printf("OK");
else
  printf("ERROR");

ファイル名の最初の「./」なし

于 2012-07-03T14:12:52.617 に答える