通过C++文件复制小程序来理解read、write函数

来源:互联网 发布:ubuntu的浏览器字体 编辑:程序博客网 时间:2024/06/17 04:43
在初期,对于输入文件和输出文件的理解,作为调取信息的文件来说,我们需要把读取方式设置为ios::in,即作为我们程序的输入;同样,对于存放信息的文件来说,我们需要把读取方式设置为ios::out,即作为程序的输出。在读取文件信息的时候,由于read函数遇到文件结束标识符EOF的时候,他会提前结束读取,加上我的输入文件中根本不存在100个字节的字符,所以不会进入weile循环,这样就必须要在while循环之后加入一个提取上次读取字符的操作,再讲上次读取到的字符write到目标文件中。否则,就会出现目标文件中没有复制到任何信息的情况。/*****************************************************copyright (C), 2016-2017, NJIT,     Ltd. File name:Author:Jijiahao   Version:0.1    Date: Description:Funcion List: *****************************************************/#include <iostream>#include <fstream>using namespace std;int main(int argc,char *argv){    fstream outfile("1.dat",ios::in|ios::binary);    if(!outfile)    {        cerr<<"open 1.dat  error"<<endl;        exit(1);    }    fstream infile("2.dat",ios::out|ios::binary);    if(!infile)    {        cerr<<"open 2.dat  error"<<endl;        exit(1);    }    outfile.seekg(ios::beg);    //文件定位    infile.seekp(ios::beg);    char buf[100];    memset(buf,0,sizeof(buf));    while( outfile.read(buf,sizeof(buf)) != 0)    {        infile.write(buf,sizeof(buf));        memset(buf,0,sizeof(buf));    }    infile.write(buf,outfile.gcount());    outfile.close();    infile.close();    cout<<"1.dat -> 2.dat 赋值成功!"<<endl;    return 0;}
原创粉丝点击