C/C++读写文本文件、二进制文件的方法分享!

一:目的

掌握C语言文本文件读写方式;

掌握C语言二进制文件读写方式;

掌握CPP文本文件读写方式;

掌握CPP二进制文件读写方式;

二:C语言文本文件读写

1. 文本文件写入

  //采用C模式对Txt进行写出  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("写出文件失败!n");  		return;  	}  	for(int i = 0; i < 50; i ++ )  	{  		fprintf(fid,"%03dt%4.6lft%4.6lfn",index[i],x_pos[i],y_pos[i]);  	}  	fclose(fid);  }  

2. 文本文件读取

  //采用C模式对Txt进行读取  void TxtRead_Cmode()  {  	FILE * fid = fopen("txt_out.txt","r");  	if(fid == NULL)  	{  		printf("打开%s失败","txt_out.txt");  		return;  	}  	vector<int> index;  	vector<double> x_pos;  	vector<double> y_pos;  	int mode = 1;  	printf("mode为1,按字符读入并输出;mode为2,按行读入输出;mode为3,知道数据格式,按行读入并输出n");  	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("%sn", line); //输出  		}  	}  	else if(mode == 3)  	{  		//知道数据格式,按行读入并存储输出  		int index_tmp;  		double x_tmp, y_tmp;  		while(!feof(fid))   		{   			fscanf(fid,"%d%lf%lfn",&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("%04dt%4.8lft%4.8lfn",index[i], x_pos[i], y_pos[i]);     	}  	fclose(fid);  }  

三:C语言二进制文件读写

1. 二进制文件写入

  //采用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,逐行写入n");  	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);  }  

2.二进制文件读取

  //采用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有多少个n");  	scanf("%d",&mode);  	if(1 == mode)  	{  		double pos[200];  		fread(pos,sizeof(double),200,fid);  		for(int i = 0; i < 200; i++)  			printf("%lfn", 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("%lfn", pos[i]);  		free(pos);  //释放内存  	}  	fclose(fid);  }  

四:C++文本文件读写

1. 文本文件写入

  //采用CPP模式写txt  void TxtWrite_CPPmode()  {  	//准备数据  	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  	fstream f("txt_out.txt", ios::out);  	if(f.bad())  	{  		cout << "打开文件出错" << endl;  		return;  	}  	for(int i = 0; i < 50; i++)  		f << setw(5) << index[i] << "t" << setw(10) << x_pos[i] <<"t" <<setw(10)<< y_pos[i] << endl;  	f.close();     }  

2.文本文件读取

  //采用CPP模式读取txt  void TextRead_CPPmode()  {  	fstream f;  	f.open("txt_out.txt",ios::in);	  	//文件打开方式选项:  	// ios::in    = 0x01, //供读,文件不存在则创建(ifstream默认的打开方式)  	// ios::out    = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)  	// ios::ate    = 0x04, //文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用  	// ios::app    = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后  	// ios::trunc   = 0x10, //在读写前先将文件长度截断为0(默认)  	// ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app联合使用  	// ios::noreplace = 0x40, //文件存在时产生错误,常和out联合使用  	// ios::binary  = 0x80  //二进制格式文件  	vector<int> index;  	vector<double> x_pos;  	vector<double> y_pos;  	if(!f)  	{  		cout << "打开文件出错" << endl;  		return;  	}  	cout<<"mode为1,按字符读入并输出;mode为2,按行读入输出;mode为3,知道数据格式,按行读入并输出"<<endl;  	int mode = 1;  	cin>>mode;  	if(1== mode)  	{  		//按字节读入并输出  		char ch;  		while(EOF != (ch= f.get()))  			cout << ch;  	}  	else if(2 == mode)  	{  		//按行读取,并显示  		char line[128];  		int numBytes;  		f.getline(line,128);  		cout << line << "t" << endl ;  		f.getline(line,128);  		cout << line << "t" << endl ;  		f.seekg(0,0);							//跳过字节  		//seekg(绝对位置);      //绝对移动,    //输入流操作  		//seekg(相对位置,参照位置);  //相对操作  		//tellg();					 //返回当前指针位置  		while(!f.eof())  		{  			//使用eof()函数检测文件是否读结束  			f.getline(line,128);  			numBytes = f.gcount();		//使用gcount()获得实际读取的字节数  			cout << line << "t" << numBytes << "字节" << endl ;  		}  	}  	else if(3 == mode)  	{  		//如果知道数据格式,可以直接用>>读入  		int index_temp = 0;  		double x_pos_temp = 0, y_pos_temp = 0;  		while(!f.eof())  		{  			f >> index_temp >> x_pos_temp >> y_pos_temp ;  			index.push_back(index_temp);  			x_pos.push_back(x_pos_temp);  			y_pos.push_back(y_pos_temp);  			cout << index_temp << "t" << x_pos_temp << "t" << y_pos_temp << endl;  		}  	}  	f.close();  }  

五:C++二进制文件读写

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/482443.html

(0)
上一篇 2020年11月9日
下一篇 2020年11月9日

精彩推荐