How to read a binary file in c? (video, images, or text)

c, fread

Solution

Are you on a Windows machine? Try adding "b" to the mode strings in the calls to `fopen`.

From man fopen(3):

The mode string can also include the letter 'b' either as a last character or as a character between the characters in any of the two-character strings described above. This is strictly for compatibility with C89 and has no effect; the 'b' is ignored on all POSIX conforming systems, including Linux. (Other systems may treat text files and binary files differently, and adding the 'b' may be a good idea if you do I/O to a binary file and expect that your program may be ported to non-Unix environments.)

Problem

I am trying to copy a file from a specified library to the current directory. I can copy text files perfectly. Any other files become corrupt. The program detects a feof before it should. ``` #include <stdio.h> int BUFFER_SIZE = 1024; FILE *source; FILE *destination; int n; int count = 0; int written = 0; int main() { unsigned char buffer[BUFFER_SIZE]; source = fopen("./library/rfc1350.txt", "r"); if (source) { destination = fopen("rfc1350.txt", "w"); while (!feof(source)) { n = fread(buffer, 1, BUFFER_SIZE, source); count += n; printf("n = %d\n", n); fwrite(buffer, 1, n, destination); } printf("%d bytes read from library.\n", count); } else { printf("fail\n"); } fclose(source); fclose(destination); return 0; } ```

Original source