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