prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 19.12

如何在读取文件之前确定文件的大小?


如果“文件的大小”是指在 C 语言中可以从中读取的字符数(或者之前程序写入的字符数),那么要精确确定这个数字可能会非常困难,甚至不可能(除非读取整个文件)。

在 Unix 系统下,stat调用(特别是 stat 结构中的st_size字段)会给你一个精确的答案。[脚注] 许多其他系统也提供了类似 Unix 的stat调用,但报告的文本文件大小可能不准确(由于行尾表示法的差异;请参阅问题 12.40)。你可以打开文件,使用fstat将文件指针定位到文件末尾,然后使用fseek,但这些函数往往存在同样的问题。ftellfstat不是可移植的,通常会返回与statstat,但这些函数往往存在同样的问题。相同的值;将文件指针定位到文件末尾,然后使用SEEK_END不保证返回字节数,除非是二进制文件(但严格来说,二进制文件并不一定支持文件长度,但这些显然也不是可移植的。filelength

?既然在 C 程序中确定文件大小的最准确方法是打开文件并读取它,也许你可以重新组织代码,在读取时获取文件大小。(一般来说,你的程序在实际读取的字符数与先前预期不符时,应该能够优雅地处理,因为任何预先确定的文件大小都可能是不准确的。)另请参阅问题 7.297.3020.2

附加链接:进一步阅读

参考:ISO Sec. 7.9.9.4
H&S Sec. 15.5.1
PCS Sec. 12 p. 213
POSIX Sec. 5.6.2


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管