fread是否因大文件而失败?

bcu*_*bed 6 c fread large-files

我必须分析一个16 GB的文件.我正在使用fread()和顺序读取文件fseek().这可行吗?会fread()为这么大的文件工作吗?

Dav*_*ley 6

你没有提到一种语言,所以我将假设C.

我看不出有任何的问题fread,但fseekftell可能有问题.

这些函数long int用作保存文件位置的数据类型,而不是像智能fpos_t或类似的东西size_t.这意味着它们无法处理超过2 GB的文件,并且肯定会在16 GB文件上失败.

您需要了解long int您的平台有多大.如果它是64位,你没事.如果是32,则在ftell用于测量距文件开头的距离时可能会出现问题.

考虑使用fgetposfsetpos不是.


bcu*_*bed 5

感谢您的回复。我弄清楚哪里出了问题。fseek()并且ftell()不适用于大于4GB的文件。我用过_fseeki64()_ftelli64()并且现在工作正常。


Buh*_*ndi 2

这取决于你想做什么。如果您想要读取内存中的全部 16GB 数据,那么您很可能会耗尽内存或应用程序堆空间。

而是逐块读取数据并对这些块进行处理(并在完成后释放资源)。

但是,除此之外,还要决定您想要采用哪种方法(使用fread()istream等)并进行一些测试用例,看看哪种方法更适合您。