テキスト・ファイルとバイナリ・ファイル、およびテキスト・ストリームとバイナリ・ストリーム(最終版)について


1)テキストファイルとバイナリファイルの紹介いわゆるテキストファイルは、ファイルに格納されているのはすべて文字であり、例えば、文字列123がテキストファイルに格納されているのはすべてそのASCIIの形式であり、つまり各文字のASCIIの形式である:31 32 33は、例えば、1つの整数データ123がテキストファイルに格納されているのも:31 32 33は各文字のASCIIの形式である.バイナリファイルの格納形式とはバイナリであり、1つの文字列123に対するバイナリファイルの格納形式は、ASCIIコードをバイナリに変換する形式である.ASCIIは31,32,33であり、その後、ASCIIコードをバイナリに変換する.すなわち、00011111,001,000001の形式である.一方、整数データ123のバイナリファイルには、123のバイナリ形式が格納されている.これは私たちがファイルの形式からこのように理解しているだけで、コンピュータのメモリに格納されているのはすべてバイナリ形式で、私たちがテキストファイルの中の内容を見ることができるのはテキストファイルがASCII復号形式を採用しているためで、バイナリファイルが採用しているのはバイナリの復号形式です!そのため、私たちがメモ帳でバイナリファイルを開くと、私たちが見たくないものがたくさん見えます.それは文字化けしています.(それらが採用する復号形式が異なる)上記の簡単な紹介を通じて、テキストファイルよりもバイナリファイルを読むことができます.これは、テキストファイルに格納されているのは単一の文字です.例えば、1つの整数データ2147483647に対して、テキストファイルには10バイトのメモリ空間を占め、バイナリファイルには4バイトのメモリ空間、つまり整数データの長さを占めています.
このストリームはコンピュータの中で2つに分けられて、1つはテキストストリームと呼ばれて、もう1つはバイナリストリームと呼ばれて、ここで少しはっきり言わなければならなくて、テキストファイルがテキストストリームの方式で開かなければならないと誤解しないでください、バイナリファイルはバイナリストリームの方式で開かなければならなくて、この理解は大間違いです!!いわゆるテキストファイルとバイナリファイルは復号方式と記憶方式が異なるだけで、どのファイルもテキストストリームとバイナリストリーム方式で開くことができます!この点は必ずはっきりさせなければならない.
テキストストリームとバイナリストリームには重要な違いがあります.
テストコードは次のとおりです.
#include "stdafx.h"
#include <stdio.h> 
#include <direct.h>
int _tmain(int argc, _TCHAR* argv[])
{   
	char lacFileName[512]={0};
	memset(lacFileName,0,sizeof(lacFileName));
	FILE *pTxtFile = NULL;

	if (getcwd(lacFileName, 512) != NULL)
	{   
	
		strcat(lacFileName,"\\ .txt");
		pTxtFile = fopen(lacFileName,"w+b");
		int data = 0x0A;
		fwrite((char*)&data,1,sizeof(int),pTxtFile);
		fclose(pTxtFile);
	}
	return 0;
}

テスト結果は次のとおりです.
まず、Unixシステムでは、各行の末尾に「<改行>」、すなわち「」しかありません.Windowsシステムでは、各行の末尾は「<折り返し><改行>」、「r」です.Macシステムでは、各行の終わりは「<リターン>」です.したがって、ファイルの読み書き時に、ファイルが開いたままファイルに数値0 x 0 Aを書き込むと、記憶時にwindowsシステムはそれをリターンキーと認識し、0 x 0 D(r:改行キー)を自動的に書き込む.バイナリ方式で開くと0 x 0 Aのみ書き込まれます.1つの直接的な結果は、Unix/Macシステムの下のファイルがWindowsで開くと、すべての文字が1行になります.WindowsのファイルをUnix/Macで開くと、各行の末尾に^M記号が1つ増える可能性があります
同時に1つのファイルがテキストストリームで開くと、ファイルに連続して格納されている0 D 0 Aの組み合わせが1文字0 A、つまり改行文字に変換されます!!1つのファイルがバイナリ・ストリームで開かれている場合、上記のような状況は発生しません.1文字1文字の読み取り、つまりどれだけの文字が私がどれだけの文字を読んでいるかにかかわらず、連続的に格納されている0 D 0 Aの組み合わせにかかわらず、1文字0 Aに変換します.この組み合わせに遭遇すると0 D 0 Aをそのまま読み出す.