C 言語が処理できるファイルの種類は、テキスト ファイルとバイナリ ファイルです。 C言語が処理できるファイルは、その格納形式によりテキストファイルとバイナリファイルに分けられます 1.テキストファイルにはASCIIコードが格納されており、ファイルの内容を直接入出力することができます 2.バイナリファイルには文字が直接格納されています、バイナリ ファイルは保存できず、ファイルの内容が直接画面に出力されます。
#このチュートリアルの動作環境: Windows7 システム、C99 バージョン、Dell G3 コンピューター。
コンピュータでは、入力と出力はデータ ストリームの形式で行われます。アクセスモードに応じて、ファイルはシーケンシャルアクセスファイルとランダムアクセスファイルに分けられます。保存形式によりバイナリファイルとテキストファイルに分かれます。テキストファイルにはASCIIコードが格納されており、ファイルの内容を直接入出力できます。バイナリ ファイルには文字が直接格納されており、バイナリ ファイルの内容を直接画面に出力することはできません。したがって、
C言語が処理できるファイルは、その保存形式に応じてテキストファイルとバイナリファイルに分かれます。
テキスト ファイルとバイナリ ファイルの違い
テキスト ファイルは、通常、.txt ファイルなど、肉眼で見える文字を保存するために使用されます。 c ファイルや .dat ファイルなどをテキスト エディタで開くと、ファイルの内容を正常に理解できます。
バイナリ ファイルは、通常、ビデオ、写真、プログラムなどの判読できないコンテンツを保存するために使用されます。これらのファイルをテキスト エディタで開くと、まったく理解できない文字化けが大量に表示されます。
しかし、物理的に言えば、バイナリ ファイルとキャラクタ ファイルには違いはなく、どちらもバイナリ形式でディスクに保存されたデータです。
テキスト ファイルの内容を理解できるのは、テキスト ファイルが ASCII、UTF-8、GBK などの文字エンコーディングを使用しているためです。テキスト エディターはこれらのエンコーディング形式を認識し、エンコーディング値を変換できます。 to 文字に変換して表示します。
バイナリ ファイルは、mp4、gif、exe などの特殊なエンコード形式を使用します。テキスト エディタはこれらのエンコード形式を認識せず、文字エンコード形式に従ってランダムに解析することしかできないため、大量のファイルになります。乱雑な文字の. 、見たことさえない人もいます。
新規にmp4ファイルを作成し、文字列を書き込んでテキストエディタで開くと理解できると思いますので、興味のある方は試してみてください。
まとめると、ファイルの種類によってエンコード形式が異なるため、正しく解析するには対応するプログラム(ソフトウェア)を使用しないと文字化けしたり、使用できなくなったりします。
プログラマにとって、テキスト ファイルとバイナリ ファイルは、ファイルを開く方法 (テキスト モード/バイナリ)、このファイルの読み取りおよび書き込みに使用する関数 (読み取りおよび書き込み関数) を示すステートメントです。どのように判決がこのファイルの最後まで読まれるか。
具体的には:
1.ファイルを開くにはどうすればよいですか?
ANSI C は、標準入出力関数ライブラリを指定し、fopen() 関数を使用してファイルを開きます。 fopen() 関数の呼び出しメソッドは通常次のとおりです。
FILE *fp;
fp=fopen(文件名,使用文件方式);
ファイル メソッドの使用方法については、以下の表を参照してください。
ファイルの使用メソッド
|
意味
|
##「r」 (読み取り専用) | 入力ファイルのテキストを開きます |
"w" (書き込みのみ) | 入力ファイルのテキスト ファイルを開きます出力 |
#"a" (追加)
追加用のテキスト ファイルを開きます |
|
"rb" (読み取り専用)
入力用にバイナリ ファイルを開きます |
| ##"wb" (書き込み専用)
出力用のバイナリ ファイルを開く |
| "ab" (追加)
追加用のバイナリ ファイルを開きます |
| "r "(読み取りおよび書き込み)
読み取り/書き込み用にテキスト ファイルを開きます |
#"w "(読み取りと書き込み) |
##読み取り/書き込み用テキスト ファイルの作成 |
##"a " (読み取りおよび書き込み)
|
読み取り/書き込み用にテキスト ファイルを開きます
|
"rb "(読み取りおよび書き込み)
|
バイナリを開きます読み書き用ファイル
|
"wb "(読み書き)
|
読み取り/書き込み用のバイナリ ファイルを作成します |
##"ab "(読み取りおよび書き込み)
|
読み取り/書き込み用にバイナリ ファイルを開きます
|
同じファイルをディスクからメモリ (プログラムデータ領域またはキャッシュ領域) に読み込んだ場合、一般に 2 つの方法ではメモリの内容が異なり、これが 2 つのオープン方法の大きな違いです。
ここには背景があり、Windows では、ファイルを書き込むときに改行文字が復帰に変換されるという処理が実行されます。改行文字は、ファイルを読み込むと、改行文字が復帰に変換されます。ファイル内の連続した復帰と改行を改行に変換する逆の処理が実行されます。
したがって、ディスク ファイルを読み取る場合、テキスト モードで読み取るファイルの内容は、バイナリ ファイルよりも短くなる可能性があります。これは、テキスト モードで読み取るには、キャリッジ リターンとライン フィードの 2 文字を 1 文字に変換する必要があるためです。文字. 、これはファイルを切り詰めることと同じです。しかし、なぜそれが可能なのでしょうか?テキスト内に 2 つの連続するバイト 45 と 42 が存在しない可能性があるため (45 は CR キャリッジ リターンの ASCII コード、42 はライン フィード CL の ASCII コード)、「切り捨て」操作はないため、読み取り内容は同じ。
具体的には、ファイル (テキスト モードで書き込まれた) はテキスト モードで読み取るのが最適です。バイナリ ファイル (バイナリ モードで書き込まれた) は、バイナリ モードで読み取るのが最適です。そうしないと、間違っている可能性があります。以上のことを分析してみました。
2. ファイルの読み取りと書き込みにはどのような関数が使用されますか?
データがディスクにどのように書き込まれるかは、ファイルを開く方法ではなく、書き込み関数によって決まります。ディスクからデータを読み取る方法は、ファイルを開く方法ではなく、読み取り関数によって決まります。
上記のデータの書き方とは、変数の種類を格納する方法を指します。たとえば、int 12 の場合、12 のバイナリ コード (4 バイト) を直接格納することも、文字 1 と文字 2 を格納することもできます。
データの読み取り方法は、int 変数を読み取りたい場合を意味します。 sizeof (int) バイトを直接読み取ることも、読み取られた文字が数字でなくなるまで 1 文字ずつ読み取ることもできます。
C には、上記の 2 つの読み取りおよび書き込み方法をサポートする 2 つのファイル読み取りおよび書き込み関数セットがあります。
1.fread(buffer,size,count 、fp)、fwrite(バッファー、サイズ、カウント、fp)。データブロックの読み取りと書き込みに使用されます。第1の保存方法に相当する。型のバイト長に応じて読み書きするバイト数を直接指定します。
2fprintf 関数と fscanf 関数 2 番目の読み書き方法に相当します。つまり、文字形式での読み取りと書き込みです。 (fprintf 関数および fscanf 関数は、printf 関数および scanf 関数と同様の機能を持ちます。これらはすべて、フォーマットされた読み取りおよび書き込み関数です。fprintf 関数および fscanf 関数の読み取りおよび書き込みオブジェクトはディスク ファイルですが、読み取りおよび書き込みオブジェクトはディスク ファイルです。 printf 関数と scanf 関数のうちの 2 つは端末です。)
それらの一般的な呼び出し形式は次のとおりです:
fprintf (ファイル ポインター、フォーマット文字列、出力リスト);
fscanf (ファイル ポインタ、フォーマット文字列、入力リスト);
3 ファイルの終わりを判断するにはどうすればよいですか?
C 言語、より正確には C 標準関数ライブラリには、特殊文字 EOF (stdio.h #define EOF (-1) の定義) があり、これは :end of を意味します。ファイル。 while ループでは EOF がファイルの終端マークとして使用されます。EOF がファイルの終端マークとして使用されるファイルはテキスト ファイルである必要があります。テキスト ファイルでは、データは文字 ASCII コード値の形式で保存されます。 ASCII コード値の範囲は 0 ~ 255 で、-1 は不可能であることがわかっているため、EOF をファイルの終わりマークとして使用できます。
ただし、C言語ではバイナリ形式でファイルにデータを格納すると-1という値が表示されるため、このときバイナリファイルの終了マークとしてEOFを使用することはできません。この問題を解決するために、ANSI C ではファイルが終了したかどうかを判断する feof 関数が提供されています。ファイルの終わりに達した場合、関数 feof (fp) の値は 1 になり、それ以外の場合は 0 になります。
feof 関数を使用して、バイナリ ファイルが終了するかテキスト ファイルが終了するかを判断できます。 。ただし、feof を使用してテキスト ファイルの終わりを判断する場合、コードが正しく記述されていないと、テキスト内のファイルの終わり文字 EOF も読み取られる可能性があることに注意してください。http://baike を参照してください。詳細については、.baidu.com/view/656648. htm
4. ファイルがテキスト ファイルであるかバイナリ ファイルであるかを知ることで、どの読み取りおよび書き込み関数を選択する必要があるかをさらに「思い出させる」ことができます。 。
2 で述べたように、データの保存方法はファイルを開く方法ではなく、読み取り関数と書き込み関数によって決まります。
たとえば、ファイルをバイナリ ファイルとして開くと (実際には改行文字の変換を指定するだけです)、これはより多くのアイデア (仮想) を表します。このファイル内のデータは次のようになります。これは、int 型が 4 バイト、char 型が 1 バイトを占有します。このモードでは、fread(buffer,size0f(int),1,fp) を使用して int を int 変数に読み取ります。
覚えておきます
ファイルを操作する前に、まずそのファイルがテキスト ファイルであるかバイナリ ファイルであるかを知る必要があります。ファイルはテキスト モードで開かれ、バイナリ ファイルはバイナリ モードで開かれます。
バイナリ ファイルを操作したい場合は、バイナリ モードで開きます (理論的にはファイル モードでも開くことができますが、バイナリデータが書き込まれます。45 が入っている場合、45,42 に変換されて保存されます。1 を参照してください。これは非常に発生する可能性があります)。読み取りと書き込みを同時に行う場合は、fread と fwrite の 2 つの関数を使用します。
テキスト ファイルを操作したい場合は、テキスト モードで開きます (理論的にはバイナリ モードでも開くことができますが、安全ではありません)。読み取りと書き込みを同時に行う場合は、これらの関数 fprintf、fscanf、fgetc、fputc、putw、getw、fgetc、fputs
関連の推奨事項: 「C ビデオ チュートリアル 」
以上がC言語で扱えるファイルの種類は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。