2012-04-19 18 views
3

c/C++で単純なテキストファイルではないファイルの内容を読み取るにはどうすればよいですか?たとえば、.jpg/.png/.bmpなどのイメージファイルを読み込んで、特定のインデックスの値を確認して、その色を確認したいとします。または.exe/.rar/.zipがあり、異なるインデックスにどのような値が格納されているかを知りたい場合は、 は、私は「image.png」と「EXAMPLE.SQL」を交換するか、そう、それが動作するかどうかを知りたい".txt"ファイル以外のファイルの内容を読み取る

FILE *fp; 

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

char c; 

c = getc(fp) ; 

でCスタイルの読み取りファイルの承知していますか?正しいデータが得られますか?

+3

*すべてのタイプのファイルは同じです。あなただけが読んだことは違いです。 –

+0

+1良い質問......... !! –

+0

ありがとうございます@Als。 –

答えて

2

バイナリモードでファイルを開く必要があります。これにより、バイトを「未処理」モードで読み取ることができます。このモードでは、ファイル内のバイトは変更されません。

しかし、特定のピクセルなどの色を決定するには、ファイル内のバイトの意味と、読み込まれるファイルの配置方法を完全に理解する必要があります。この第2の要件ははるかに困難です。それを行うには、そのファイルタイプのフォーマットに関するいくつかの調査を行う必要があります。

+0

私は群集があります.bmpは圧縮されていないファイルなので、ピクセルの色データは順番に並んでいます。これは本当ですか? –

+1

@someone_smiley .bmpは圧縮されていませんが、まだフォーマットがあります。 Wikipediaには、この件に関するいくつかの[info](http://en.wikipedia.org/wiki/BMP_file_format)があります。 –

8

あなたは非テキストファイルを開くと、あなたはバイナリ(非翻訳)モードを指定することをお勧めします:典型的なケースで

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

を、あなたはその構造体を定義することにより、バイナリファイルからあなたの読書のほとんどを行いますファイル内の構造体をミラーリングしてから、freadを使用してファイルから構造体に読み込みます(構造体内のパディングのようなものがメモリ内表現とオンデマンド表現の間で異なることがないように注意してください)ディスク)。

+0

ありがとうございました:)。だから、 "rb"モードは他のすべての拡張機能を開くために必要なので、私はデータフォーマットに注意する必要がありますか? "ファイルの構造をミラーリングする構造体の定義"についてもっと詳しく説明できれば感謝します。 "構造体をミラーリングする"という用語を理解できません。 –

1

yea of​​corseのいずれかのファイルをbinary modeで開くことができます。もしあなたが興味があれば、そのようなテキストでないファイルの第1バイトを読むこともできます。

ほとんどの場合、すべてのファイルフォーマットにはいくつかの固定ヘッダーがあり、それに基づいてそのファイルのタイプを識別できます。

オープン任意のMatroskaは(mkvの)ファイルと第一4バイトを読んで、あなたは常にあなたも、Linuxでバイナリ表現で任意のファイルhexdumpユーティリティ

====を見ることができます。この

0x1A 0x45 0xDF 0xA3 

を持っています================ 編集:ここ

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

あなたはフォーマット0を理解する必要がありますそのファイルに基づいて、どの情報がどの情報を示しているのかを知ることができます。

+0

私に教えていただきありがとうございます:) –

関連する問題