在初期,对于输入文件和输出文件的理解,作为调取信息的文件来说,我们需要把读取方式设置为ios::in,即作为我们程序的输入;同样,对于存放信息的文件来说,我们需要把读取方式设置为ios::out,即作为程序的输出。
在读取文件信息的时候,由于read函数遇到文件结束标识符EOF的时候,他会提前结束读取,加上我的输入文件中根本不存在100个字节的字符,所以不会进入weile循环,这样就必须要在while循环之后加入一个提取上次读取字符的操作,再讲上次读取到的字符write到目标文件中。否则,就会出现目标文件中没有复制到任何信息的情况。
#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;
}