我有一个文件。我读文件的大小。然后我循环一次读取两个字节,直到我到了文件的末尾。后,每读操作我由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(或其他输入功能),直到文件的末尾。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top