someone_ smiley
someone_ smiley

Reputation: 1066

Reading the content of file other than ".txt" file

How can i read content of a file which is not a simple text file in c/c++? For example, I want to read image file such as .jpg/.png/.bmp and see the value at certain index,to check what colour it is? or if I have a .exe/.rar/.zip and want to know what value is stored at different indices? I am aware of c style reading file, which is

FILE *fp;

fp = fopen("example.txt","r"); /* open for reading */

char c;

c = getc(fp) ;

I want to know if i replace "example.txt" with "image.png" or so, will it works? will i get correct data?

Upvotes: 3

Views: 2928

Answers (3)

Jeegar Patel
Jeegar Patel

Reputation: 27210

yea ofcorse you can open any file in binary mode in c. if you are interested then you can also read some 1st byte of any such non text file.

In most of the cases all different file-format has some fixed header so based on that you can identify the type of that file.

Open any matroska(.mkv) file and read 1st 4 byte you will always have this

0x1A   0x45   0xDF   0xA3

you can also see any file in binary representation hexdump utility in linux

==================== Edit:

such as .jpg/.png/.bmp and see the value at certain index,to 
check what colour it is?

here you need to understand the format of that file and based on that you can know on which place's data what information is indicating..!!!

Upvotes: 1

Jerry Coffin
Jerry Coffin

Reputation: 490138

When you open a non-text file, you'll want to specify binary (untranslated) mode:

FILE *fp = fopen("example.png", "rb");

In a typical case, you do most of your reading from binary files by defining structs that mirror the structures in the file, and then using fread to read from the file into the structure (but this has to be done carefully, to ensure that things like padding in the struct don't differ between the representation in-memory and on-disk).

Upvotes: 9

Jonathan Wood
Jonathan Wood

Reputation: 67193

You would need to open the file in binary mode. This allows you to read the bytes in a "raw" mode where they are unchanged from what was in the file.

However, determining the color of a particular pixel, etc. requires that you fully understand the meaning of the bytes in the file and how they are arranged for the file being read. This second requirement is much more difficult. You'll need to do some research on the format of that file type in order to do that.

Upvotes: 2

Related Questions