C - 什么是获取文件大小的最快方法?

时间:2013-08-05 23:36:31

标签: c file size cross-platform

使用以下方法打开文件后

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

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

我已经看到ftell仅在以二进制模式打开文件时才有效。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

我建议使用ftell

它不是100%准确,但它足够好。除非你处理的是每行只有一个或两个字符的文件,以及大量的行,否则开销可能并不重要(当然,如果文件有一百万行,那么平台是Windows或其他新行更多的东西)如果超过一个字符,则会分配1M个额外字节。但如果每条线路平均长度为50个字节,那么您将分配50MB,因此它的开销为2%。

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

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

答案 2 :(得分:0)

如果您在平台(如Windows)上以非二进制模式读取文件,其中行尾字符超过一个字节,则无法准确判断文件在内存中占用多少空间长。

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