1

Cを初めて使用し、次のようにfopenコマンドを使用してファイルを読み取ろうとしています。

 FILE *f = fopen (argv[1], "rb" );

         if(!f)
        {
            printf("ERROR! Unable to open file \n");
            fclose(f);
            return 1;
        }

読み込もうとしているファイルは「somefile.dat」です

これを実行すると、コンソールに次のように表示されます

  ERROR! Unable to open file 

したがって、fはnullですが、これをデバッグするにはどうすればよいですか?どこから問題を探し始めるのですか?

ありがとう


アップデート:

以下のさまざまな提案を試してみたところ、ファイルが見つからないことが問題であることがわかりました。

XCodeを使用してプログラムを実行すると、XCodeはファイルが配置されている場所とは異なるディレクトリで実行可能ファイルを実行するため、ファイルを見つけることができませんでした。私はそれに難しい道を与えました、そしてそれはうまくいきました。

問題は、XCodeにファイルへの正しいパスを提供する方法です。XCodeは実行可能ファイルをどこで実行しますか?

4

3 に答える 3

3

これをデバッグするには、次のようにする必要があります。

  • 追加printfして、中身を確認しますargv[1]
  • 印刷された値が予想されるファイル名と一致することを確認してください。必要に応じて、コマンドラインを変更して絶対パスを検索します~myuser/somefile.datc:\myproject\somefile.datsomefile.dat
  • その名前のファイルが現在のディレクトリに存在することを確認してください
  • プログラムを実行しているユーザー(通常はユーザー)に、ファイルを読み取るためのアクセス許可があることを確認してください。
于 2013-03-24T16:04:15.047 に答える
2
  • まず、ファイルの名前をハードコーディングします。問題がなくなった場合、問題はargvの使用にあります。

  • 次に、ファイルが存在することを確認します。エクスプローラーで開いてみてください。多分それはどういうわけかロックされています。

  • より説明的なエラーには、perrorを使用してください。

これらの問題が見つかることを願っています。

于 2013-03-24T16:04:02.710 に答える
1

私は以下の考えられる理由を考えることができます

1)パスが正しくない

2)ファイルsomefile.datの権限が正しくないため、fopenが失敗します

errnoを使用して、何が問題を引き起こしているかを確認できます。

http://www.cplusplus.com/reference/cstdio/fopen/

http://www.cplusplus.com/reference/cerrno/errno/

于 2013-03-24T16:05:07.713 に答える