如何使用C中的stat()查找不同相对目录中文件的大小?

时间:2012-06-22 22:46:40

标签: c macos

这是我使用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”这样的绝对路径,那就可以了。

我做错了什么以及如何表明我为相对路径做这件事?

1 个答案:

答案 0 :(得分:1)

我猜测正在发生的事情是你错误地假设工作目录。测试工作目录的简单方法是编写一个只输出像test.txt这样的文件的程序。在许多(但不是全部)情况下,工作目录是存储可执行文件的任何位置。这意味着如果您尝试访问相对路径上的文件,则可能需要在相对路径中包含至少一个..才能离开bin目录。