【发布时间】:2015-08-31 18:57:38
【问题描述】:
问题:当文件路径相对到当前工作目录时,有没有办法通过绝对文件路径获取文件大小为off_t不知道
这很可能被标记为重复,但我相信它与 this 或 this 等问题有很大不同,因为我不希望使用相对路径。
像许多人一样 - 它似乎 - 我陷入了假设在寻找文件信息时 stat() 使用 absolute 而不是 relative 的陷阱(对于当前工作目录)路径名。我有一个文件的绝对路径,我需要将其大小标识为off_t。我发现的第二个问题是绝对路径名——除了指向错误的地方——也可能超过PATH_MAX from limits.h?。
下面的函数here 提供了一种获取具有相对路径的off_t 的方法。但是这显然会通过 errno 以绝对路径返回 No such file or directory,因为它使用 stat()。
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
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;
}
因为我知道有人会问;我被告知chdir() 既不是线程安全的也不是好的做法;我应该避免更改当前工作目录。我还被建议避开fseek(),但没有给出理由说明为什么......
【问题讨论】:
-
还有……你在问什么?
stat()确实适用于绝对路径! -
啊...我肯定很困惑。
-
path 完全不相关。可能有两个或多个目录条目指向同一个 inode。 (甚至零链接: fstat() 可以给出甚至没有目录条目的文件描述符的大小)
-
我建议您查看
fstatat(),它提供绝对路径和相对路径,并消除了chdir()的必要性。 -
最可能的原因:路径名中的尾随空格或 CR。 (或者为了更有趣:backspace)