您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:246 来源:vckbase.com

本文章共1729字,分2页,当前第1页,快速翻页:
 

多文件的合并与分解

作者:李斤询


源代码下载
逆@风@者

  本程序示例如何将多个文件合并成一个文件,并能够自分解。此技术在制作安装程序时非常有用。我在本网站学到了此技术,并将他整理扩展,能够合并文件和目录,个数不限。
  核心程序包括一个合并文件类 CCombineFiles,一个分解文件的类 CExtractFiles 和一个表示文件或目录信息的数据类 FileInfo 文件和目录的信息都由FileInfo类表示。此类定义如下:

class FileInfo  

{

public:

	const FileInfo &operator = (const FileInfo &fi);

	FileInfo(CString szFileName, UINT nFileSize, UINT nPos, char type = 0);

	FileInfo();

	virtual ~FileInfo();



public:

	CString szFileName;

	UINT nSize;

	UINT nPos;



	char type; // d --- directory , f --- file , other --- no define 

}; 
合并文件类CCombineFiles定义如下:
class CCombineFiles  

{

public:

	bool Combine(CStringArray &fileList, CString szToFileName);

	CCombineFiles(CString szExeFileName);

	virtual ~CCombineFiles();



public:

	bool WriteFileInfo(FileInfo fi, FILE *fp);

	bool WriteString(CString szStr, FILE *fp);

	bool WriteListInfo(CArray &fiList, FILE *fp, UINT nStartOffset);

	bool CombineFile(CString szFileName, FILE *fp);

	bool CombineDirectory(CString szDir, FILE *fp);

	CString m_szExeFileName;



}; 
  其中WriteFileInfo函数负责写入文件或目录的信息; WriteString负责写入一个字符串,字符串结构是“长度 字符列表"; WriteListInfo函数负责写入要合并的文件列表信息,他多次调用WriteFileInfo来完成; CombineFile负责写入文件数据; CombineFile负责写入一个目录的所有数据,它调用CombineFile和WriteListInfo来写入文件数据和目录中的文件列表信息。
  Combine函数是供外部调用的函数,它将fileList中的各个文件和目录都合并到szToFileName中去。
  合并文件的算法思想是:各个文件的数据都放在合并后文件的开头,在合并后文件的结尾处存放合并前的文件列表;对这个目录合并后就当作一个单独的文件处理,只需在文件信息中指明这个文件分解后生成一个目录,然后其数据就是一个合并的文件;如此第归。

分解文件类CExtractFiles定义如下:
class CExtractFiles  

{

public:

	bool ExtractFiles(CArray &fiList, CString szPath);

	bool ReadFileList(CArray &fileList);

	CExtractFiles(CString filename);

	virtual ~CExtractFiles();



public:

	bool ExtractDirectory(FileInfo fi, CString szPath, FILE *fp);

	bool ExtractFile(FileInfo fi, CString szPath, FILE *fp);

	bool ReadString(CString &szStr, FILE *fp);

	bool ReadFileInfo(FileInfo &fi, FILE *fp);

	bool ReadListInfo(CArray &fiList, FILE *fp, UINT &nStartOffset);

	bool ReadFileList(CArray &fiList, FileInfo dir);

	CArray m_fileList;

	CString m_filename;

};

   与合并文件类CCombineFiles一一对应,在合并中的合并函数对应都有其分解时的读取函数。这里就不多说了。
  举例:文件列表包括f1,f2,f3三个文件和目录D,目录D中有两个文件f4,f5。设合并后文件名为Combine。则合并过程如下:
  首先合并目录D中的f4和f5,将他两个的数据写入Combine;然后将f4和f5的文件信息写入Combine;然后将f1,f2,f3的文件数据写入Combine;最后将文件f1,f2,f3和目录D的文件信息写入Combine。至此和并完成。
 
本文章更多内容1 - 2 - 下一页>>
相关文章

用原始套接字实现网络监听
在MFC中应用CTreeCtrl控件的技巧
HLA学习笔记(1)
几个数字信号处理算法程序
如何利用Xerces C 正确处理XML文档中的中文
封装ADO之MFC应用
VC实现波形不闪烁动态绘图
使用VC ATL实现Office的COM插件
函数功能流程图,in as,line feed
Javascript - Prototype Based Language
也谈 QQ 安全
使用三态树实现多目录选择
通过串口实时接收短消息
通过程序向RichEditView写文本
宽字符标量L
C#与松下FP∑可编程控制器的通信
Windows下的高精度计时和高频事件的产生
用MFC构造DIRECTX应用框架
对注册表进行简单的操作
直接读取Excel文件数据

相关评论


本文章所属分类:首页 VC++

  热门关键字: