0

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

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

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

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

4

3 回答 3

3

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

于 2013-08-05T23:38:31.050 回答
1

我建议使用ftell.

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

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

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

于 2013-08-06T00:34:11.803 回答
0

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

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

于 2013-08-06T00:16:58.897 回答