C语言编程FTELL FSEEK FREAD,读取文件的大小
题
我有一个文件。我读文件的大小。然后我循环一次读取两个字节,直到我到了文件的末尾。后,每读操作我由2递增的当前位置,但是后我得到的文件的大小的一半的位置没有得到递增,所述的fread操作将读取0字节。
程序读取文件的大小。我直到当前位置执行的fread(2个字节每次)等于该文件的大小。 它读取22915轮轮空的文件大小 它递增2位置每次读取之后,但是当当前位置到达11459它是文件的一半大小它将读取从而零个字节进入无限循环。
FILE *file;
char *file_name;
int readCount = 0;
int position = 0;
int fileSize;
unsigned short mem_accesses;
file_name = "sample.txt";
/** open the file */
file = fopen(file_name, "rb");
fseek(file, 0, SEEK_END);
fileSize = ftell(file);
rewind(file);
while(position<fileSize){
mem_accesses = getNumberAccesses();
printf("position: %d filesize: %d\n",position, fileSize);
}
unsigned short getNumberAccesses(){
/** calculate number of accesses for process */
unsigned short val;
readCount = fread(&val, sizeof(val), 2, file);
position += readCount;
printf("read count: %d\n", readCount);
return val;
}
解决方案
readCount = fread(&val, sizeof(val), 2, file);
此语句读取的每两个字节的两个项目。和它返回值的 2 下,对于读取的物品的数量。第二和第三参数相乘告诉fread
多少字节来读取。
其他提示
的fread返回元件的数量读取,不能字节数。
(顺便提及,在您的代码错误地给它的2族的元素计数引起缓冲区溢出)。
您应该检查的fread的返回值,所以你不会在错误的情况下运行到无限循环。
代替查询的文件大小的,我会简单地调用在一个循环的fread(或其他输入功能),直到文件的末尾。
不隶属于 StackOverflow