学习要点:
1 ifstream ofstream 两种文件流对象的写法。
2 获得实际的读取数据
f1.gcount()
gcount()方法返回最后一个非格式化的抽取方法读取的字符数。这意味着字符由get(),getline()、ignore()、或read()方法读取的,不是由抽取操作符( >> )读取的,抽取操作符对输入进行格式化,使之与特定的数据类型匹配
//fin.read()
//fin.gcount() 最后一次得到几个字节
#include <iostream>
#include <fstream>
using namespace std;
void encode (char *buf ,int bytes)
{
for(int i =0;i < bytes;i++)
{
++ *buf;
buf++;
//注意 *buf++ 这加的是buf
}
}
int main(int agrc,char *argv[])
{
//a.out 源文件 新文件
if(agrc != 3)
{
cout << argv[0] << "源文件 新文件" << endl;
return 0;
}
ifstream f1(argv[1],ios::binary|ios::in);
if(!f1)
{
cout << "打开" << argv[1] << "文件失败" << endl;
return 1;
}
ofstream f2(argv[2],ios::binary|ios::out); //默认清空 或者创建
// ios::app 追加
if(!f2)
{
cout << "打开" << argv[2] << "文件失败" << endl;
return 2;
}
char buf[128];
while(f1)
{
f1.read(buf,sizeof(buf)); //read 文件到内存
cout.write(buf,f1.gcount()); //write 内存到文件 打印到屏幕
encode(buf,f1.gcount()); //加密函数
f2.write(buf,f1.gcount()); // 千万不要用sizeof(buf) 特别是网络程序中,可能每次都读不满
}