65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.66/5 (69投票s)

2001 年 11 月 19 日

CPOL

5分钟阅读

viewsIcon

189664

downloadIcon

1909

用于打包和解包文件归档的类。

概述

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

© . All rights reserved.