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 归档中的所有文件提取到指定的目录。将使用默认文件名来处理每个提取的文件。第二个重载用于提取单个文件。对于此版本,您需要为提取的文件指定一个包含路径的完整限定文件名。


