bcu*_*bed 6 c fread large-files
我必须分析一个16 GB的文件.我正在使用fread()和顺序读取文件fseek().这可行吗?会fread()为这么大的文件工作吗?
你没有提到一种语言,所以我将假设C.
我看不出有任何的问题fread,但fseek并ftell可能有问题.
这些函数long int用作保存文件位置的数据类型,而不是像智能fpos_t或类似的东西size_t.这意味着它们无法处理超过2 GB的文件,并且肯定会在16 GB文件上失败.
您需要了解long int您的平台有多大.如果它是64位,你没事.如果是32,则在ftell用于测量距文件开头的距离时可能会出现问题.
考虑使用fgetpos而fsetpos不是.
这取决于你想做什么。如果您想要读取内存中的全部 16GB 数据,那么您很可能会耗尽内存或应用程序堆空间。
而是逐块读取数据并对这些块进行处理(并在完成后释放资源)。
但是,除此之外,还要决定您想要采用哪种方法(使用fread()或istream等)并进行一些测试用例,看看哪种方法更适合您。