CFileTar 1.0 - 打包和解包文件归档






4.66/5 (69投票s)
用于打包和解包文件归档的类。
概述
CFileTar
是一个 C++ 类 [使用纯 C++ 和少量 Win API 编写],它允许您打包和解包文件。熟悉 Unix 的人肯定使用过 tar 归档实用程序。此类试图为 Win 32 程序员提供一个相当简单的版本。请注意,此类不生成类 Unix 的 tar 文件。它使用自己的自定义格式来打包和解包文件。
特点
- 不需要 MFC
- 将多个文件打包到单个归档中
- 从归档中单独或整体解包文件
- 查询 tar 文件信息
- 支持文本和二进制文件
用法
打包文件
通过以下步骤可以轻松地将几个文件打包到单个 tar 归档中。
CFileTar ft; ft.SetHeaderDescription("This archive contains several pdf/doc files"); //Let's add some doc files ft.SetFilePath("D:\\nish\\worddocs"); ft.AddFile("Proposal.doc","First project proposal"); ft.AddFile("ProjectPlan.doc","Project plan"); ft.AddFile("ProposalFinal.doc","Final proposal"); //Now some PDFs ft.SetFilePath("D:\\nish\\pdffiles"); ft.AddFile("SRS.pdf","SRS doc template"); ft.AddFile("DDD.pdf","Detailed design doc template"); //Let's tar it now... ft.CreateTar("ProjFiles.tar");
查询 tar 文件
有时,您可能希望检索有关 tar 文件信息。CFileTar
提供了一些用于此目的的静态函数。
CFileTar::TarHeader t; CFileTar::GetTarInfo("D:\\nish\\files.tar",&t); cout << "Number of archived files : " << t.GetCount() << "\r\n"; cout << "Description of tar file : " << t.GetDescription() << "\r\n";
您还可以检索有关单个文件的信息。
CFileTar::TarIndex ti; for (int y=1;y<=t.GetCount();y++) { CFileTar::GetFileInfo("D:\\nish\\files.tar", &ti,y); cout << "File Index : " << y << "\r\n"; cout << "File Name : " << ti.FileName << "\r\n"; cout << "File desc : " << ti.Description << "\r\n"; cout << "Size : " << ti.Size << "\r\n"; }
解包文件
解包单个文件:-
CFileTar::UnTar("D:\\nish\\files.tar",3, "D:\\nish\\q1.xls"); CFileTar::UnTar("D:\\nish\\files.tar",5, "D:\\nish\\sw34.doc");
解包 tar 文件中的所有文件:-
CFileTar::UnTar("D:\\nish\\files.tar", "D:\\nish\\temp");
函数参考
CFileTar::CFileTar
CFileTar();
备注:- 创建一个 CFileTar
对象。
CFileTar::SetHeaderDescription
BOOL SetHeaderDescription(char *strdesc);
返回值:- 如果成功设置了头信息,则返回 true
,否则返回 false
。
参数:-
strdesc
- 这是头信息字符串
备注:- 使用此函数设置 tar 文件的头信息。这在查询 tar 文件时会很有用。
CFileTar::GetHeaderDescription
const char* GetHeaderDescription();
返回值:- 这将返回 tar 文件的头信息
备注:- 此函数可用于检索指向头信息的 const char*
。
CFileTar::SetFilePath
void SetFilePath(char *path);
参数:-
path
- 这是搜索要添加到 tar 归档中的文件的目录。
备注:- 在将文件添加到归档之前设置文件路径。您可以更改文件路径任意次数,因为您可以从不同文件夹添加文件。
CFileTar::AddFile
int AddFile(char *fname, char *desc);
返回值:- 如果文件已成功添加到文件列表中,则返回 0,否则返回 1。
参数:-
fname
- 要添加的文件的文件名,不包括其所在目录
desc
- 作为每个文件元信息的描述。
备注:- 此函数实际上不会将文件添加到 tar 中。相反,它会将文件名和元信息添加到要打包的文件列表中。物理归档过程仅在调用 CreateTar
函数时发生。
CFileTar::CreateTar
int CreateTar(char *TarFName, char* TarPath=NULL);
返回值:- 如果成功创建 tar,则返回 0,否则返回 1
参数:-
TarFName
- 要创建的 tar 文件的文件名,不包括目录路径。
TarPath
- 要在其中创建 tar 文件的目录。如果未指定,则使用使用 SetFilePath
设置的最后一个 tar 文件目录作为默认目录。
备注:- 这是实际创建 tar 归档的函数。如果正在打包几个大文件,此函数显然需要相当长的时间。
CFileTar::GetTarInfo
static int GetTarInfo(char *TarFile, TarHeader *pTarHeader);
返回值:- 如果成功,则返回 0,否则返回 1。
参数:-
TarFile
- tar 文件的完整限定路径和文件名。
pTarHeader
- 指向 TarHeader
对象的指针,用于接收信息
备注:- 使用此函数检索 Tar 文件头信息和 tar 归档中的文件总数。
CFileTar::TarHeader::GetCount
int GetCount();
返回值:- 返回 tar 归档中的文件数。
备注:- 调用已成功调用 GetTarInfo
函数并传入的 TarHeader
对象上的此函数。
CFileTar::TarHeader::GetDescription
const char* GetDescription();
返回值:- 返回 tar 头信息描述。
备注:- 调用已成功调用 GetTarInfo
函数并传入的 TarHeader
对象上的此函数。
CFileTar::GetFileInfo
static int GetFileInfo(char *TarFile, TarIndex *pTarIndex, int index);
返回值:- 如果成功,则返回 0,否则返回 1。
参数:-
TarFile
- tar 文件的完整限定路径和文件名。
pTarIndex
- 指向 TarIndex
对象的指针,该对象将接收信息。
index
- 归档中文件的索引。索引是基于 1 的。
备注:- 在成功调用此函数后,我们传入的 TarIndex
对象将包含所需的信息。
CFileTar::TarIndex
struct TarIndex { long Start; long Size; char FileName[_MAX_FNAME]; char Description[256]; }
Start
- 这是文件在归档中的起始位置。用户无需关心此字段。
Size
- 这是文件的大小(以字节为单位)
FileName
- 这是原始文件名
Description
- 这是文件描述
CFileTar::UnTar
static int UnTar(char *TarFile, char *dpath);
static int UnTar(char *TarFile, int index, char *fpath);
返回值:- 如果成功,则返回 0,否则返回 1。
参数:-
TarFile
- tar 文件的完整限定路径和文件名。
dpath
- 将归档中的所有文件提取到的目录。将使用原始文件名来处理归档中的每个文件。
index
- 归档中文件的索引。基于 1 的索引。
fpath
- 用于提取文件的完整限定路径和文件名。
备注:- 此函数的第一个重载会将 tar 归档中的所有文件提取到指定的目录。将使用默认文件名来处理每个提取的文件。第二个重载用于提取单个文件。对于此版本,您需要为提取的文件指定一个包含路径的完整限定文件名。