1

stat() を使用してファイルのサイズを取得する関数は次のとおりです。

off_t fsize(const char *filename) {                                                                                                                   
  struct stat st;                                                                                                                                        

  if (stat(filename, &st) == 0)                                                                                                                          
     return st.st_size;                                                                                                                                 

  fprintf(stderr, "Cannot determine size of %s: %s\n",                                                                                                   
         filename, strerror(errno));                                                                                                                    

  return -1;                                                                                                                                             
}

次のようにすることで、ファイルサイズをうまく取得できます。

size = fsize ("byte.bin");

しかし、ローカルディレクトリの下のディレクトリからファイルを取得する必要がある場合、たとえば「deps/src」ディレクトリとしましょう。予期したエラーメッセージが表示されずに途中で停止します。

size = fsize ("deps/src/byte.bin");

関数を使用する小さなプログラムを作成し、byte.bin ファイルを「deps/byte.bin」にコピーし、「deps/byte.bin」で fsize 関数を呼び出すと、「byte.bin のサイズを特定できません」というエラーが表示されます。 : そのようなファイル、又はディレクトリはありません"

「/something/deps/byte.bin」のような絶対パスを使用すると機能します。

私は何を間違っていますか?相対パスに対してこれを行う方法を示しますか?

4

1 に答える 1

1

何が起こっているのかは、作業ディレクトリについて誤って想定していることだと思います。作業ディレクトリがどこにあるかをテストする簡単な方法は、のようなファイルを出力するだけのプログラムを作成することですtest.txt。多くの場合(すべてではありません)、作業ディレクトリは実行可能ファイルが保存されている場所です。つまり、相対パス上のファイルにアクセスしようとしている場合..、ディレクトリから抜け出すには、相対パスに少なくとも1つを含める必要がありますbin

于 2012-06-25T20:04:43.073 に答える