我知道我可以通过FILE *
获得fseek
的文件大小,但我所拥有的只是一个INT fd。
在这种情况下如何获取文件大小?
答案 0 :(得分:16)
fstat会奏效。但我不确定你如何计划通过fseek获取文件大小,除非你也使用ftell(例如fseek到最后,然后ftell你在哪里)。 fstat更好,即使对于FILE,因为你可以从FILE句柄获取文件描述符(通过fileno)。
stat, fstat, lstat - get file status
int fstat(int fd, struct stat *buf);
struct stat {
…
off_t st_size; /* total size, in bytes */
…
};
答案 1 :(得分:16)
您可以使用lseek
SEEK_END
作为原点,因为它会返回文件中的新偏移量,例如
off_t fsize;
fsize = lseek(fd, 0, SEEK_END);
答案 2 :(得分:2)
我喜欢将我的代码示例编写为函数,以便它们可以剪切并粘贴到代码中:
int fileSize(int fd) {
struct stat s;
if (fstat(fd, &s) == -1) {
int saveErrno = errno;
fprintf(stderr, "fstat(%d) returned errno=%d.", fd, saveErrno);
return(-1);
}
return(s.st_size);
}