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

C-什么';获取文件大小的最快方法是什么?,c,file,size,cross-platform,C,File,Size,Cross Platform,使用以下命令打开文件后: const char *fMode = "r"; FILE *filePointer = fopen(location,fMode); 什么是最快的跨平台(Windows和Linux)方法来获得其大小,以便您可以使用malloc分配适当的内存量 我已经看到,只有在以二进制模式打开文件时,ftell才有效。在打开文件之前,您可以使用stat或fstat找到大小。在打开文件之前,您可以使用stat或fstat找到大小。实际上没有办法确切地说出一个文件的空间大小如果在行尾字

使用以下命令打开文件后:

const char *fMode = "r";
FILE *filePointer = fopen(location,fMode);
什么是最快的跨平台(Windows和Linux)方法来获得其大小,以便您可以使用
malloc
分配适当的内存量


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

在打开文件之前,您可以使用
stat
fstat
找到大小。

在打开文件之前,您可以使用
stat
fstat
找到大小。

实际上没有办法确切地说出一个文件的空间大小如果在行尾字符长度超过一个字节的平台(如Windows)上以非二进制模式读取文件,文件将占用内存


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

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


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

我建议使用
ftell

虽然不是100%准确,但已经足够好了。除非您处理的文件每行只有一到两个字符,而且行数很多,否则开销可能并不重要(当然,如果文件有一百万行,并且平台是Windows或其他平台,其中换行符多于一个字符,那么将额外分配100万字节。但如果每行平均长度为50字节,则将分配50MB,因此这是2%的开销)

唯一的替代方法是读取文件中的每一行,并计算字符数。如果要将文件读入内存,这是一种非常糟糕的方法


建议使用
stat
fstat
或其他类似函数,都会有与给定“文件在磁盘上占用的字节数,而不是您读取的字符数”完全相同的缺陷[再次假设,换行符不止一个字符,这在Windows和其他一些操作系统上都是如此].

我建议使用
ftell

它不是100%准确,但已经足够好了。除非您处理的文件每行只有一到两个字符,而且行数很多,否则开销可能并不重要(当然,如果文件有一百万行,并且平台是Windows或其他平台,其中换行符多于一个字符,那么将额外分配100万字节。但如果每行平均长度为50字节,则将分配50MB,因此这是2%的开销)

唯一的替代方法是读取文件中的每一行,并计算字符数。如果要将文件读入内存,这是一种非常糟糕的方法

建议使用
stat
fstat
或其他类似函数,都会有与给定“文件在磁盘上占用的字节数,而不是您读取的字符数”完全相同的缺陷[再次假设,换行符不止一个字符,这在Windows和其他一些操作系统上是如此]。

定义“快速”?易于实现?运行时?以二进制模式打开文件有什么问题?定义“快速”?易于实现?运行时?以二进制模式打开文件有什么问题?