用于分割和合并文件的类






4.75/5 (7投票s)
2002 年 8 月 13 日
3分钟阅读

83583

3021
本文介绍两个类,一个用于将文件分割成较小的块,另一个用于将较小的文件合并成一个文件。 还有一个使用这些类编写的实用程序。
引言
本文解释了两个类 CFileSplit
和 CFileMerge
。
CFileSplit
此类用于将文件分割成多个部分。 有两种方法可以使用它来分割文件: - 分割成固定数量的文件,或分割成每个文件具有特定大小的文件。 该类派生自 CWinThread
类。 将其实现为线程意味着 -
- 使用此类的任何应用程序在处理时都不会冻结
- 您可以取消长时间的分割过程。 此外,线程会将消息发送回调用窗口,指示分割或合并过程的进度。
使用 CFileSplit
非常简单。 在您的项目中包含FileSplit.h 和 FileSplit.cpp 文件。 使用 AfxBeginThread
函数创建 CFileSplit
对象,并设置输入文件名、输出目录以及分割方式(即固定数量的文件或固定大小的文件)。 另外,将 CWinThread
对象的 m_pMainWnd
成员设置为当前窗口。 这将使其能够将消息发送回该窗口。
CFileSplit *m_pFS; . . . m_pFS = (CFileSplit*)(AfxBeginThread(RUNTIME_CLASS(CFileSplit))); m_pFS->m_pMainWnd = this; m_pFS->m_InputFileName = m_InputFile; m_pFS->m_OutputDirName = m_OutputDir; m_pFS->m_nSplitMode = 0; m_pFS->m_nSplitVal = 12;
m_nSplitMode
成员指示如何分割。 0 表示分割成固定数量的文件,在这种情况下,文件数量将位于 m_nSplitVal
中。 如果 m_nSplitMode
为 1,则表示分割成固定大小的文件,在这种情况下,m_nSplitVal
将包含每个输出文件的大小(以字节为单位)。
要启动分割过程,请向 CFileSplit
对象发送 WM_FS_START
消息。 WM_FS_START
是在FileSplit.h 中定义的应用程序定义消息
m_pFS->PostThreadMessage(WM_FS_START,0,0);
线程将在完成文件分割后自行销毁。
如果您想跟踪分割过程的进度,CFileSplit
线程将向您发送 WM_FS_UPDATESTATUS
消息。 此消息的 WPARAM
将包含进度百分比。 分割完成后,LPARAM
将设置为 1。 您可以在您的应用程序中处理此消息; 在您的消息映射中,添加以下内容:-
BEGIN_MESSAGE_MAP(CFileSplitPage, CPropertyPage) //{{AFX_MSG_MAP(CFileSplitPage) . . . //}}AFX_MSG_MAP ON_MESSAGE(WM_FS_UPDATESTATUS, OnUpdateStatus) END_MESSAGE_MAP()
其中 OnUpdateStatus
是处理函数,声明为
afx_msg void OnUpdateStatus(WPARAM wP, LPARAM lP);
CFileMerge
此类执行与上述相反的操作; 它获取一堆文件并将它们组合成一个文件。 (DOS 中的 copy /b 命令也可以做同样的事情)。 它的实现方式类似于 CFileSplit
,可以按如下方式使用
CFileMerge *m_pFM;
.
.
.
m_pFM = (CFileMerge*)AfxBeginThread(RUNTIME_CLASS(CFileMerge));
m_pFM->m_pMainWnd=this;
m_pFM->m_InFiles.Copy(arr);
m_InFiles
成员是一个 CStringArray
,其中包含要组合的输入文件列表,按它们要组合的顺序排列。
m_pFM->m_OutFile = m_OutFile; m_pFM->PostThreadMessage(WM_FM_START,0,0);
您发送一个 WM_FM_START
消息来启动该过程。 类似于 CFileSpit
,您会收到一个 WM_FM_UPDATESTATUS
消息,指示合并的进度。
示例应用程序
提供的示例应用程序是使用上述类编写的。 这是一个基于对话框的应用程序,但我将主对话框类更改为从 CPropertySheet
而不是 CDialog
派生,并将分割和合并作为两个页面添加到它。(正如您所看到的,我无法从属性表中删除“帮助”按钮,也无法添加最小化按钮)。
从“分割”页面,您可以选择要分割的文件,选择输出目录,然后点击“开始”按钮。 该应用程序创建带有编号扩展名的文件(outfile.ext.1、outfile.ext.2 等...)
从“合并”页面选择输入文件。 添加文件时,它会尝试根据扩展名(如果已编号)进行排序。 如果它们的顺序不正确,您可以上下移动它们。 点击“开始”按钮开始合并。 在长时间的分割或合并过程中,您可以点击“取消”按钮停止该过程。
历史
2002 年 8 月 17 日 - 更新了下载