我用这段代码来读取文件。但是fread功能总是返回0.我的错误是什么?
FILE *file = fopen(pathToSourceFile, "rb");
if(file!=NULL)
{
char aByte[50000];
int ret = fread(aByte, sizeof(aByte), 1, file);
if(ret != 0)
{
not jump into there;
fseek(file, 0, SEEK_SET);
fwrite(aByte, ret, 1, file);
}
}
fclose(file);
答案 0 :(得分:4)
你确定你的文件大小超过50000吗?否则你可以试试:
fread(aByte,1, sizeof(aByte), file);
答案 1 :(得分:3)
答案 2 :(得分:1)
您无法fwrite
以rb
模式打开文件。
ret
始终为零的陈述是错误的。如果您已正确检测了代码,则不会做出错误的声明:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *file = fopen("junk.dat", "rb");
if(file!=NULL)
{
char aByte[50000];
int ret = fread(aByte, sizeof(aByte), 1, file);
fprintf(stderr, "fread returned %d\n", ret);
if(ret != 0)
{
int fs = fseek(file, 0, SEEK_SET);
if(fs == -1) {
perror("fseek");
exit(1);
}
fs = fwrite(aByte, ret, 1, file);
if(fs != ret) {
perror("fwrite");
exit(1);
}
}
}
fclose(file);
return 0;
}
收率:
fread returned 1
fwrite: Bad file descriptor
跑步时。
答案 3 :(得分:0)
万一有人碰到这个。我刚遇到类似的问题。这是因为fread的第二个参数应该是缓冲区中每个元素的大小。在OP的代码中,它是指向缓冲区的指针的大小。
如果buff至少有1个元素,这应该可行:
int ret = fread(aByte, sizeof(aByte[0]), 1, file);
答案 4 :(得分:0)
就我而言,我想读取一个大小为6553600字节(一个mp3)的文件,并且该文件返回读取的0个字节。这让我发疯,直到我尝试手动对30个字节进行硬编码,但它的确读取了30个字节。
我开始玩它,看看它能读多少,事实证明,如果您要求它读取262145个字节,它可以读取262144个字节(2 ^ 18)字节。
结论:至少使用此功能,您无法一次加载整个文件。
答案 5 :(得分:-1)
你有没有:
#include <unistd.h>
如果没有,并且如果你在没有-Wall的情况下进行编译,那么C编译器可能错误地认为fread()的第二个参数是int而不是off_t,这可能会搞乱函数调用。您的代码段不显示任何#include语句,因此请确保包含您正在使用的所有内容。