C++输入输出流方面的问题

编写程序,用二进制方式读写指定的文件a.bin,在每一行前加行号,写入另一个二进制文件b.bin中,从b.bin中读取数据输出到屏幕。编写程序lab6_1.cpp,使用v... 编写程序,用二进制方式读写指定的文件a.bin,在每一行前加行号,写入另一个二进制文件b.bin中,从b.bin中读取数据输出到屏幕。
编写程序lab6_1.cpp,使用void main(int argc, char*argv[])函数中的参数传递操作的文件名,定义ofstream的对象对文件进行操作,使用read()和write()成员函数读入数据,使用输出流对象输出数据到文件和屏幕。
展开
 我来答
sinba6530d
2010-07-19 · TA获得超过449个赞
知道小有建树答主
回答量:367
采纳率:0%
帮助的人:220万
展开全部
给你看一个简单的测试程序
read 和 write 的 缓冲区参数 使用 (char *) 类型,
所以想办法构造以缓冲区,与变量交换数据,读写采用整体操作
下面的测试是采用联合的方式,也可以采用对象数组的方式操作

注意!! 不要给已存在的重要文件名 运行下面的程序,文件内容将被清除造成不可挽回的损失。

#include <fstream>
#include <iostream>
using namespace std;
union IODWord{
int sint;
unsigned uint;
float ffloat;
char ch[4];
};
int main(int argc,char * argv[]){
if(argc!=2){
cout<<"USAGE: "<<argv[0]<<" filename"<<endl;
exit(1);
}
cout<<"program name:"<<argc[0]<<endl;
cout<<"io file name:"<<argc[1]<<endl;

ofstream out;
out.open(argv[1],ios::binary|ios::out); //二进制方式打开文件并清除内容,不存在则创建

cout<<sizeof(int)<<"\n";
cout<<sizeof(unsigned int)<<"\n";
cout<<sizeof(float )<<"\n";
cout<<sizeof(char )<<"\n";
cout<<sizeof(long int)<<"\n";
cout<<sizeof(double)<<"\n";

IODWord outbuf[20];
for (int i=0;i<5;i++){
outbuf[i*4].sint = - i;
outbuf[i*4+1].uint= i;
outbuf[i*4+2].ffloat= (float) i*3.14;
outbuf[i*4+3].ch[0]='a'+i;
outbuf[i*4+3].ch[1]='A'+i;
outbuf[i*4+3].ch[2]='0'+i;
outbuf[i*4+3].ch[3]='9'-i;
}
for(int j=0;j<10;j++){
out.write((char *) outbuf,sizeof(outbuf));
}
out.close();
ifstream in;
in.open("abc.bin",ios::in|ios::binary);
IODWord ibuf[4];
while(in.good()){
in.read((char *)ibuf,sizeof(ibuf));
cout<<"sint="<<ibuf[0].sint<<"\t";
cout<<"uint="<<ibuf[1].uint<<"\t";
cout<<"float="<<ibuf[2].ffloat<<"\t";
cout<<"char="<<ibuf[3].ch[0]<<ibuf[3].ch[1]<<ibuf[3].ch[2]<<ibuf[3].ch[3]<<endl;
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式