/*
* 16.cpp
*
* Created on: 2010-5-28
* Author: zhanghan
* 程设16次作业-----文件操作
* 合并程序:merge.exe
命令行敲 :
merge –e file1 file2 file3 …. result.dat
则将 file1, file2, file3 … 等一系列文件合并成一个文件,名为 result.dat。 -e表示合并
merge –x result.dat
则将result.dat里打包的文件解出来放在当前文件夹下 -x表示要解开 ,须保持原来的文件名
*
*/
#include <iostream>
#include<fstream>
using namespace std;
int main(int argc ,char *argv[])
{
char t=argv[1][1];//判断是合并文件还是解压文件
if(t=='e')//合并文件
{
ofstream outfile(argv[argc-1],ios::binary|ios::out);//打开输入的最后一个文件,用来写入
if(!outfile)
{
cout<<"new file open error"<<endl;
return 0;
}//未生成则提示错误
//打开中间输入的待合并的文件,把文件名写入合并后的文件,然后把文件的内容加入合并后的的文件中,依次进行
for(int i=2;i<argc-1;i++)
{
ifstream infile(argv[i],ios::binary|ios::in);//一次打开每一个文件,从中读数据
if(!infile)
{
cout<<"source file open error"<<endl;
return 0;
}
//写文件名
int j=0;
while(argv[i][j])
{
outfile.put(argv[i][j]);
j++;
}
outfile.put(EOF);//用EOF表示文件名的结束
//写文件内容
char c;
while(infile.get(c))
outfile.put(c);
outfile.put(EOF);//写入eof表示文件的结束
infile.close();//关闭代写文件
}
outfile.close();//关闭合并后的文件
}
if(t=='x')
{
//打开待解压的文件,打开文件不成功就提示错误
ifstream infile(argv[argc-1],ios::binary|ios::out);
if(!infile)
{
cout<<"new file open error"<<endl;
return 0;
}
//从文件中读入每一个文件的信息,先是文件的名称,在一个EOF之后是文件的内容
char p[32]={};
while(infile.getline(p,32,EOF))//从待解压文件中,记下一个文件名,用这个名称创见一个文件,从打开的源文件中写入创建的文件的内容
{
ofstream ou(p,ios::binary|ios::out);//用读入的文件名创建一个文件
if(!ou)//没有正确创建时的提示信息
{
cout<<"new file open error"<<endl;
return 0;
}
memset(p,0,sizeof(p));//p归零,
char q [1000000]={};
if(infile.getline(q,1000000,EOF))//读文件的内容
{
int i=0;
int len=strlen(q);
for(i=0;i<len;i++)
ou.put(q[i]);
ou.put(EOF);
memset(q,0,sizeof(q));
}
ou.close();//关闭文件
}
infile.close();//关闭源文件
}
return 0;
}