• 相关软件
    >如何将一个文件分割成多个小文件 创建者:webmaster 更新时间:2005-05-17 23:57

    你也许会遇到到这样一个问题?当你有一个较大的软件,而无法用一张软盘将其全部拷下时,你也许会想到该将它分解开,分盘拷回去后,再将它们合并起来。现在的这种分割工具很多,你想自己动手做一个适合自己的分割工具么?下面就让我用以前用VC做的一个<袖珍文件分割器>的例程来告诉你吧!程序运行后界面如下图:

    基本构成思想:文件分割的基本思想比我之前发表的另一篇文章既绾谓喔鑫募喜⑽桓隹芍葱谐绦颍镜墓钩伤枷爰虻ザ嗔耍饕卜治指钗募秃喜⒎指詈蟮奈募蟛糠帧7指钗募募粗付ǚ指畲笮〗械确郑缓笏承蚨寥∑渲付ǚ指畲笮∈莺蟮叫吹礁髯缘男陆ㄎ募小:喜⑽募鞣指詈蟮奈募承蚨寥『螅慈氲揭桓鑫募屑瓤伞?

    1、分割文件时:打开文件,读取指定的分割大小一段数据,写入到一新建文件中,接着再读同样大小的一段数据,再写入到一新建文件中……,直到读出文件最后一部分数据,写入到最后一个新建文件中。对每一个分割后的新建文件名,采用原文件名前加数字信息的方法,按分割的顺序,按个加上一数字标识信息,以便合并时使用。
    分割文件的部分代码实现如下:
    //文件分割涵数
    int CFileSpltDlg::SplitMe()
    {
    …… (省略:此部分代码实现省略掉)
    //分割文件
    do {
    //动态建立一个新建文件名的前的数字
    name = _ltoa(l, buff, 10);
    name += _T("_");
    CString newpath;

    //判断选择目录未尾是否已有"\"符
    if(m_targetpath.Right(1)=='\\')
    newpath = m_targetpath;
    else
    newpath = m_targetpath + _T("\\");
    if (!destFile.Open(newpath + name + m_SourceFile.GetFileName(),
    CFile::modeWrite |
    CFile::shareExclusive |
    CFile::typeBinary |
    CFile::modeCreate, &ex)) {
    TCHAR szError[1024];
    ex.GetErrorMessage(szError, 1024);
    ::AfxMessageBox(szError);
    m_SourceFile.Close();
    return 1;
    }
    do {
    dwRead = m_SourceFile.Read(buffer, nCount);
    destFile.Write(buffer, dwRead);
    }//当文件小于指定要分割的大小时
    while (dwRead > 0 && destFile.GetLength() < newlen);
    destFile.Close();

    l++;
    UpdateWindow();
    }while (dwRead > 0);
    m_SourceFile.Close();
    return 0;


    2、合并文件时:和上面分割所采用的方法相反,将各个分割后的小文件读出后,按其分割后文件名前数字大小的顺序,按个写入到新建的文件中,这一新建文件的名字,为去掉分割后文件前面数字部分后的文件名(既原文件名)。
    合并文件的部分代码实现如下:
    // 文件合并涵数
    int CFileSpltDlg::MergeMe()
    {
    …… (省略:此部分代码实现省略掉)
    //开始合并文件
    do {
    //自动定位分割文件名前的数字信息
    pref = _ltoa(l, buff, 10);
    pref += _T("_");
    //打开新的分割文件
    if (!m_SourceFile.Open(newpath + pref + m_filename,
    CFile::modeRead |
    CFile::shareExclusive |
    CFile::typeBinary, &ex)) {
    TCHAR szError[1024];
    ex.GetErrorMessage(szError, 1024);
    destFile.Close();
    m_path = _T("");
    m_filename = _T("");
    newpath = _T("");
    UpdateData(FALSE);
    return 0;
    }
    else
    //形成一个新的文件名
    name = _T(newpath + pref + m_filename);
    do {//写入到目标文件中
    dwRead = m_SourceFile.Read(buffer, nCount);
    destFile.Write(buffer, dwRead);
    }while (dwRead > 0);

    m_SourceFile.Close();

    l++;
    UpdateWindow();
    }while (l < 500);//little bit dirty solution, but you can always improve it!...

    return 0;
    }

    以上各部分代码的具体实现,请在下载例程后,参看源代码既可。

    联系方式:
    地址:陕西省西安市劳动路2号院六单元
    邮编:710082
    作者EMAIL:jingzhou_xu@163.net
    相关文章
    本页查看次数: