欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言_文件输入输出_二进制文件

程序员文章站 2022-07-14 23:10:35
...

二进制文件又名字节文件。一般指直接存放到磁盘或者内存中的文件。

二进制文件与我们平常见到的 "txt”文件在本质上没有什么差别,后者比前者多了一个编码过程。比如文本文档使用的是ANSI编码,

.Cpp 文件 是UTF-8编码,网页浏览使用的Unicode编码,不论什么时候数据通过不同的编码或平台之间,那些数据总会有损坏的危险。 举个例子:unicode在简体中文的环境下是乱码。所以保护数据尽量使用数据本身的属性进行操作。

文件写入

#include<fstream>  
#include<iostream>  
#include<string>
using namespace std;
int main()
{
    char  ch[3]={'a','A','1'};
    ofstream outfile("0",ios::binary);
    if(!outfile){
      cout<<"open error!"<<endl;
      abort();
      }
     for(int i=0;i<3;i++)
     outfile.write((char*)&ch[i],sizeof(ch[i]));
     outfile.close();
     return 0;
}

文件输出:

6141 31

二进制文件保存后显示为十六进制的数字 61--->97 对应的ASCII为    'a'

                                                                  41--->65 对应的ASCII为    'A'

                                                                  31--->49 对应的ASCII为    '1'

文件只读

#include<fstream>  
#include<iostream>  
#include<string>
using namespace std;
int main()
{
    char inch[5];
  ifstream infile("0",ios::binary);
  if(!infile)
   {
             cerr<<"open error!"<<endl;
             abort();
   }
   for(int i=0;i<3;i++)
   infile.read((char*)&inch[i],sizeof(inch[i]));
   infile.close();
   cout<<inch<<endl;
   system("pause");
   return 0;
}

批量二进制合并

#include<fstream>  
#include<iostream>  
#include<string>
char inch[1000005];
using namespace std;
int main()
{
    
  fstream iofile("re",ios::in|ios::out|ios::binary);
//频繁的读取写入
   if(!iofile)
   {
             cerr<<"open io error!"<<endl;
             abort();
   }
   
    for(int j=0;j<=30;j++){
            char temp[4];
            itoa(j,temp,10);
   char * filet=temp;//文件名称(或者文件路径)
   
  ifstream infile(filet,ios::binary);
  if(!infile)
   {
             cerr<<"open error!"<<endl;
             abort();
   }
     /*重新定义一个临时对象,对输入流操作:seekg()与tellg()*/
       
         //获取文件大小 (字节)
               int ps;
               ifstream fin(filet);
                        if( fin.is_open() )
                        	{
                         		fin.seekg( 0, ios::end );
                                //基地址为文件结束处,偏移地址为0,于是指针定位在文件结束处
                           		int size = fin.tellg();
//tellg()函数不需要带参数,它返回当前定位指针的位置,也代表着输入流的大小。
                           		fin.close();
	                            ps=size;
	                        }
               
              // cout<<ps<<endl;
   for(int i=0;i<ps;i++)
   infile.read((char*)&inch[i],sizeof(inch[i]));
   infile.close();
   
   iofile.seekp(0,ios::end);//指针指向文件的尾部
   for(int i=0;i<ps;i++)
     iofile.write((char*)&inch[i],sizeof(inch[i]));
     
   }
   iofile.close();
  // cout<<inch<<endl;
   system("pause");
   return 0;
}