二进制文件又名字节文件。一般指直接存放到磁盘或者内存中的文件。
二进制文件与我们平常见到的 "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;
}
C语言二进制文件操作指南
二进制文件在磁盘中直接存储,与文本文件主要差异在于编码过程。文件写入时,如'abc'以ASCII码61, 41, 31保存。文件只读和批量二进制合并是常见的操作,有助于保护数据免受编码转换导致的损坏。"
6686694,753823,程序执行时间测试:Windows与UNIX平台的实现,"['测试', '操作系统', 'C++', '汇编', 'UNIX']
9万+

被折叠的 条评论
为什么被折叠?



