您已经打开使用文件后:C - 获取文件大小的最快方法是什么?
const char *fMode = "r";
FILE *filePointer = fopen(location,fMode);
什么是最快的跨平台(Windows和Linux)的方式来获得它的大小,以便您可以使用分配的malloc
内存适量?
我见过ftell
只适用于以二进制模式打开文件。
您已经打开使用文件后:C - 获取文件大小的最快方法是什么?
const char *fMode = "r";
FILE *filePointer = fopen(location,fMode);
什么是最快的跨平台(Windows和Linux)的方式来获得它的大小,以便您可以使用分配的malloc
内存适量?
我见过ftell
只适用于以二进制模式打开文件。
我会推荐使用ftell
。
它不是100%准确的,但它足够好。除非你正在处理的文件每行只有一两个字符,而且行数很多,否则开销可能并不重要(当然,如果文件有一百万行,并且平台是Windows或其他新行更多的地方那么将会有1M的额外字节被分配,但是如果每行平均长度为50个字节,则将分配50MB,因此这是2%的开销)。
ftell
的唯一替代方法是读取文件中的每一行,并计算字符数。如果你想将文件读入内存,这是一个非常糟糕的方式来做到这一点。
对stat
或fstat
或其他类似函数的建议将具有完全相同的缺陷,即给出“文件在磁盘上占用的字节数,而不是读取的字符数”[假设再次使用换行符不止一个字符,Windows和其他一些操作系统就是这种情况]。
在打开文件之前,您可以使用stat
或fstat
找到尺寸。
如果您在平台(如Windows)上以非二进制模式读取文件时,确实无法确切知道文件将占用多少内存空间,其中行尾字符不止一个字节长。
尽管如此,除非文件有很多很短的行,否则ftell
或fstat
返回的文件大小只会有点太大。
定义“快”?易于执行?运行?以二进制模式打开文件有什么问题? – xaxxon