C编程ftell fseek fread,读取文件大小

use*_*514 0 c file-io 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;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*del 8

readCount = fread(&val, sizeof(val), 2, file);  
Run Code Online (Sandbox Code Playgroud)

该语句读取两个两个字节的项目.并且它返回值2,用于读取的项目数.第二个和第三个参数相乘可以fread说明要读取的字节数.