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;
}
上一篇: 一、Python基础 5.循环
下一篇: python基础学习5