should help you out This is intended. fread always reads from the file's current read pointer and advances that same pointer, so you can a file in sequential chunks without having to explicitly seek. You shouldn't have to read the same chunk twice in a row. What you're checking this way is whether some other process has changed the file in the meantime, and if one has, then your program will erroneously report that the copy failed.
Strange value when reading from binary file with fread() in C