[英]Reading a large file using C (greater than 4GB) using read function, causing problems
[英]Using fread function: size to be read is greater than available for reading
我有个问题:
我正在使用fread来读取文件。
typedef struct {
int ID1;
int ID2;
char string[256];
} Reg;
Reg *A = (Reg*) malloc(sizeof(Reg)*size);
size = FILESIZE/sizeof(Reg);
fread (A, sizeof(Reg), size, FILEREAD);
使用循环,连续调用此调用,让我读取整个文件。
当我接近文件的末尾会发生什么,我无法读取“size”* sizeof(Reg),或者如果你只能读取这个数量的一半,那么我的数组A会发生什么。它会是完成? 该函数将返回错误?
知道如何通过fread读取文件?
Edi1:确切地说,如果除法不精确,当我读到最后一点较小的文件大小时,我将读取未存档的内容,我想知道我的向量调整大小到我可以读取的字节数,或者发展更好的动态。
fread返回它读取的记录数。 缓冲区之外的任何内容都可能被破坏,不依赖于该数据。
fread返回实际读取的完整项目的数量,如果发生错误或者在到达计数之前遇到文件末尾,则可能小于计数。
该函数不会读取超过文件末尾的内容:最有可能的情况是,您将获得一堆完整缓冲区,然后读取(最终)部分缓冲区,除非文件大小是缓冲区长度的精确倍数。
您的逻辑需要适应这一点 - 文件大小为您提供了预期的记录总数,因此不应该忽略缓冲区中的尾随数据(在最终的fread
调用之后)与未初始化的记录相对应。 “剩余阅读记录”计数器将是一种方法。
fread()
返回它可以读取的元素数。 因此,您必须检查fread()
的返回值,以找出数组中有多少元素有效。
如果发生错误或达到EOF
,它将返回短项目计数或零。 在这种情况下,您将不得不使用feof()
ond ferror()
来检查满足的条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.