fread没读全文件却返会读取到末尾
时间: 2023-09-06 15:09:53 浏览: 174
为什么fwrite写文件后,用fread读出来文件长度是0,即fread读不出数据
fread函数是用来从文件中读取数据的,但是它并不会自动判断文件的大小。因此,如果你没有正确指定要读取的数据大小,fread可能会读取到文件末尾,并且返回读取到的数据量小于你期望的大小。
要解决这个问题,你需要确保正确指定要读取的数据大小。通常,你可以使用ftell函数获取文件的当前位置,然后使用fseek函数将文件指针移动到文件的开头,然后再使用fread函数进行读取。
下面是一个示例代码,演示了如何正确使用fseek和ftell来读取整个文件:
```c
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "rb");
if (file == NULL) {
printf("Failed to open file.\n");
return 1;
}
// 获取文件大小
fseek(file, 0, SEEK_END);
long size = ftell(file);
fseek(file, 0, SEEK_SET);
// 分配内存用于存储文件内容
char *buffer = (char *)malloc(size);
if (buffer == NULL) {
printf("Failed to allocate memory.\n");
fclose(file);
return 1;
}
// 读取文件内容
size_t bytesRead = fread(buffer, 1, size, file);
if (bytesRead != size) {
printf("Failed to read file.\n");
free(buffer);
fclose(file);
return 1;
}
// 打印文件内容
printf("File content:\n%s\n", buffer);
// 释放内存和关闭文件
free(buffer);
fclose(file);
return 0;
}
```
在这个示例中,我们首先使用fseek和ftell获取文件的大小,然后根据文件大小分配足够的内存用于存储文件内容。接下来,我们使用fread函数将文件内容读取到内存中。最后,我们打印文件内容,释放内存并关闭文件。
请注意,示例中的文件打开模式是"rb",表示以二进制模式读取文件。你可以根据需要修改打开模式。
阅读全文