### 使用 CFileHandle 类实现文件分割与合成

如果我们将一个比较大的文件通过邮箱传递给某一个用户，通常会花费很长时间，甚至有些邮箱限制用户发送的文件大小。这就需要我们对文件进行分割，将其分割为多个小文件单独发送，对方在接收文件后，重新组合这些文件就可以恢复为原来的文件。例如，图 1 显示了一个文件被分割为多个子文件。

图 1 分割文件

图 2 显示了被分割的文件内容，这些内容是连续的。

图 2 文件数据被分割

为了方便进行文件分割，笔者设计了一个 CFileHandle 类。在 CFileHandle 类中包含了两个方法，其中 SplitFile 方法用于分割文件，ComposeFile 方法用于合成文件。CFileHandle 类的声明如下：

class CFileHandle

{

public:

static void SplitFile(char *pszFileName, int nCount, int &nFactCount); //分解文件

static void ComposeFile(const char *pszFileName, char*pszSubFiles[], int nCount); //合成文件

};

下面的代码实现了“目录.txt”文件的分解。

CFileHandle::SplitFile("c:\\目录.txt", 5, nCount);

而下面的代码用于将分解的文件合成为一个新的文件。

char *szFiles[] = {"c:\\0.txt", "c:\\1.txt", "c:\\2.txt", "c:\\3.txt", "c:\\4.txt"};

CFileHandle::ComposeFile("c:\\目录新.txt", szFiles, 5); //合成文件

效果如图 3 所示。

图 3 合成后的完整文件