/*
* 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;
}

posted on 2010-05-28 19:29  梦涵  阅读(815)  评论(0编辑  收藏  举报