(C/C++)(読み取り/書き込み)(バイナリファイル/テキストファイル)

4723 ワード

C++書き込みバイナリファイル
std::ofstream fout("a.dat", std::ios::binary);
int nNum = 20;
std::string str("Hello, world");
fout.write((char*)&nNum, sizeof(int));
fout.write(str.c_str(), sizeof(char)*(str.size()));
fout.close();

C++読み込みバイナリファイル
std::ifstream fin("a.dat", std::ios::binary);
int nNum;
char szBuf[256] = {0};
fin.read((char*)&nNum, sizeof(int));
fin.read(szBuf, sizeof(char) * 256);
std::cout <

C++書き込みファイル
std::ofstream fout("b.dat");
int nNum = 20;
std::string str("Hello, world");
fout << nNum << " " << str << std::endl;
fout.close();

C++テキストファイルの読み取り
std::ifstream fin("b.dat");
int nNum;
char szBuf[256] = {0};
fin >> nNum >> szBuf;
std::cout <

ファイルのオープンモード
ファイル操作時に、指定したオープンモードが表示されない場合、ファイルストリームクラスはデフォルト値を使用します.
で、次のオープンモードとファイルのプロパティを定義します.
ios::app//後から追加
ios::ate//ファイルの最後を開いて見つけます
ios::binary//バイナリモードI/O(テキストモードに対して)
ios::in//読み取り専用オープン
ios::out//書き込みオープン
ios::trunc//ファイルを0にカット
ビットオペレータORを使用して、これらのフラグを組み合わせることができます.たとえば、
 ofstream logFile("log.dat", ios::binary | ios::app);
--------------------------------------------
Cバイナリファイルを書く
void DataWrite_CMode()
{
	//    
	double pos[200];
	for(int i = 0; i < 200; i ++ )
		pos[i] = i ;
	//    
	FILE *fid;
	fid = fopen("binary.dat","wb");
	if(fid == NULL)
	{
		printf("      ");
		return;
	}
	int mode = 1;
	printf("mode 1,    ;mode 2,    
"); scanf("%d",&mode); if(1==mode) { for(int i = 0; i < 200; i++) fwrite(&pos[i],sizeof(double),1,fid); } else if(2 == mode) { fwrite(pos, sizeof(double), 200, fid); } fclose(fid); }

Cバイナリファイルの読み込み
void DataRead_CMode()
{
	FILE *fid;
	fid = fopen("binary.dat","rb");
	if(fid == NULL)
	{
		printf("      ");
		return;
	}
	int mode = 1;
	printf("mode 1,  pos    ;mode 2,   pos    
"); scanf("%d",&mode); if(1 == mode) { double pos[200]; fread(pos,sizeof(double),200,fid); for(int i = 0; i < 200; i++) printf("%lf
", pos[i]); free(pos); } else if(2 == mode) { // fseek (fid , 0 , SEEK_END); long lSize = ftell (fid); rewind (fid); // int num = lSize/sizeof(double); double *pos = (double*) malloc (sizeof(double)*num); if (pos == NULL) { printf(" "); return; } fread(pos,sizeof(double),num,fid); for(int i = 0; i < num; i++) printf("%lf
", pos[i]); free(pos); // } fclose(fid); }

Cテキストファイルを書く
void TxtWrite_Cmode()
{
	//    
	int index[50] ;
	double x_pos[50], y_pos[50];
	for(int i = 0; i < 50; i ++ )
	{
		index[i] = i;
		x_pos[i] = rand()%1000 * 0.01 ;
		y_pos[i] = rand()%2000 * 0.01;
	}
	//  txt
	FILE * fid = fopen("txt_out.txt","w");
	if(fid == NULL)
	{
		printf("      !
"); return; } for(int i = 0; i < 50; i ++ ) { fprintf(fid,"%03d\t%4.6lf\t%4.6lf
",index[i],x_pos[i],y_pos[i]); } fclose(fid); }

Cテキストファイルを読む
void TxtRead_Cmode()
{
	FILE * fid = fopen("txt_out.txt","r");
	if(fid == NULL)
	{
		printf("  %s  ","txt_out.txt");
		return;
	}
	vector index;
	vector x_pos;
	vector y_pos;
	int mode = 1;
	printf("mode 1,        ;mode 2,      ;mode 3,      ,       
"); scanf("%d",&mode); if(mode == 1) { // char ch; // , ch EOF(end of file) while(EOF!=(ch= fgetc(fid))) printf("%c", ch); } else if(mode == 2) { char line[1024]; memset(line,0,1024); while(!feof(fid)) { fgets(line,1024,fid); printf("%s
", line); // } } else if(mode == 3) { // , int index_tmp; double x_tmp, y_tmp; while(!feof(fid)) { fscanf(fid,"%d%lf%lf
",&index_tmp, &x_tmp, &y_tmp); index.push_back(index_tmp); x_pos.push_back(x_tmp); y_pos.push_back(y_tmp); } for(int i = 0; i < index.size(); i++) printf("%04d\t%4.8lf\t%4.8lf
",index[i], x_pos[i], y_pos[i]); } fclose(fid); }

--------------------------------------------
Cバイナリ画像データの読み出し
FILE *fp;
string path="../img"+to_string(index)+".png";
fp=fopen(path.c_str(),"rb");
if(!fp)
{
    cout<

参照先:
C++読み書きバイナリファイル
C/C++読み書きテキストファイル、バイナリファイル