2013-08-05 125 views
-1

您已经打开使用文件后:C - 获取文件大小的最快方法是什么?

const char *fMode = "r"; 
FILE *filePointer = fopen(location,fMode); 

什么是最快的跨平台(Windows和Linux)的方式来获得它的大小,以便您可以使用分配的malloc内存适量?

我见过ftell只适用于以二进制模式打开文件。

+1

定义“快”?易于执行?运行?以二进制模式打开文件有什么问题? – xaxxon

回答

1

我会推荐使用ftell

它不是100%准确的,但它足够好。除非你正在处理的文件每行只有一两个字符,而且行数很多,否则开销可能并不重要(当然,如果文件有一百万行,并且平台是Windows或其他新行更多的地方那么将会有1M的额外字节被分配,但是如果每行平均长度为50个字节,则将分配50MB,因此这是2%的开销)。

ftell的唯一替代方法是读取文件中的每一行,并计算字符数。如果你想将文件读入内存,这是一个非常糟糕的方式来做到这一点。

statfstat或其他类似函数的建议将具有完全相同的缺陷,即给出“文件在磁盘上占用的字节数,而不是读取的字符数”[假设再次使用换行符不止一个字符,Windows和其他一些操作系统就是这种情况]。

3

在打开文件之前,您可以使用statfstat找到尺寸。

0

如果您在平台(如Windows)上以非二进制模式读取文件时,确实无法确切知道文件将占用多少内存空间,其中行尾字符不止一个字节长。

尽管如此,除非文件有很多很短的行,否则ftellfstat返回的文件大小只会有点太大。

相关问题