Qt TAR类别使用说明


目录

  1. QtTAR类别
  2. QtTarBall类别
  3. HiddenFileTypes列举
  4. HiddenFileInfo资料结构


QtTAR类别

功能

处理TAR的封装数据。

宣告

class QtTAR
{
  public:

    explicit       QtTAR        (void) ;
    virtual       ~QtTAR        (void) ;

    virtual int    BlockSize    (void) const ;
    virtual bool   isBlock      (QByteArray & block) ;
    virtual bool   isPadding    (QByteArray & block) ;

    virtual qint64 FileBlocks   (qint64 size) ;
    virtual int    Checksum     (QByteArray & block,char replace = ' ') ;

    virtual bool   Extract      (QByteArray & block         ,void       * hiddenFileInfo) ; // block => File
    virtual bool   Bale         (void       * hiddenFileInfo,QByteArray & data          ) ; // File  <= Data

  protected:

    QString        toOct        (int checksum) ;
    void           PackOct      (char * buf,qint64 size,int length) ;
    qint64         FromOct      (char * buf,int length) ;

  private:

    void           Copy         (char * buf,QString string) ;

} ;

说明


int BlockSize(void) const

TAR的封包大小,一般是512位元组。


bool isBlock(QByteArray & block)

检查是否为TAR封包。


bool isPadding(QByteArray & block)

检查是否为填空封包。


qint64 FileBlocks(qint64 size)

将size转换成512位元组对齐的数量。TAR文件格式均必须是512位元组的倍数,这个函式把文件大小转换成512位元组对齐的数值。


int Checksum(QByteArray & block,char replace = ' ')

计算TAR封包512位元组的Checksum值。


bool Extract(QByteArray & block,void * hiddenFileInfo)

将TAR封包数据解译为文件记录资讯。


bool Bale(void * hiddenFileInfo,QByteArray & data)

将文件记录资讯封装为TAR封包数据。


QString toOct(int checksum)

将Checksum转换成八进位字串。


void PackOct(char * buf,qint64 size,int length)

将size数据封装成八进位数值,并且複製到buf当中。


qint64 FromOct(char * buf,int length)

将buf以八进位格式转换成qint64。


void Copy(char * buf,QString string)

将string字串複製到buf当中。



QtTarBall类别

功能

处理TarBall文件内容,一般的TAR文件处理需要继承这个类别。

宣告


class QtTarBall : public QtTAR
{
  public:

    explicit       QtTarBall        (void) ;
    virtual       ~QtTarBall        (void) ;

    virtual bool   List             (QDir root,QIODevice & IO) ;
    virtual bool   List             (QDir root,QString filename) ;

    virtual bool   Extract          (QDir root,QIODevice & IO) ;
    virtual bool   Extract          (QDir root,QString filename) ;

    virtual bool   TarBall          (QIODevice & IO,QDir root,QDir source,bool recursive = true) ;
    virtual bool   TarBall          (QString filename,QDir root,QDir source,bool recursive = true) ;

  protected:

    virtual bool   Interval         (void) ;
    virtual void   Report           (void * hiddenFileInfo) ;

    virtual bool   ListFile         (QDir root,QIODevice & IO,void * hiddenFileInfo) ;
    virtual bool   Extract          (QDir root,QIODevice & IO,void * hiddenFileInfo) ;

    virtual bool   Read             (QIODevice & IO,QByteArray & data,qint64 size) ;
    virtual bool   Skip             (QIODevice & IO,qint64 size) ;
    virtual bool   Write            (QIODevice & IO,QByteArray & data) ;
    virtual bool   WriteClose       (QIODevice & IO) ;
    virtual bool   WriteFile        (QIODevice & IO,QFileInfo & file) ;

    virtual bool   ExtractFile      (QDir root,QIODevice & IO,void * hiddenFileInfo) ;
    virtual bool   ExtractDir       (QDir root,QIODevice & IO,void * hiddenFileInfo) ;
    virtual bool   ExtractLink      (QDir root,QIODevice & IO,void * hiddenFileInfo) ;
    virtual bool   ExtractDEVs      (QDir root,QIODevice & IO,void * hiddenFileInfo) ;
    virtual bool   ExtractNext      (QDir root,QIODevice & IO,void * hiddenFileInfo) ;
    virtual bool   ExtractEXT       (QDir root,QIODevice & IO,void * hiddenFileInfo) ;
    virtual bool   setFileTime      (QDir root,QIODevice & IO,void * hiddenFileInfo) ;
    virtual bool   setFileMode      (QDir root,QIODevice & IO,void * hiddenFileInfo) ;

    virtual QFileInfoList Listing   (QDir & root,QDir source) ;
    virtual bool   WriteTAR         (QIODevice & IO,QDir & root,QFileInfo & file) ;
    virtual bool   ToHiddenFileInfo (QDir & root,QFileInfo & file,void * hiddenFileInfo) ;

    virtual void * NewHiddenFile    (void) ;
    virtual void   CleanHiddenFile  (void * hiddenFileInfo) ;

  private:

} ;

说明


bool List(QDir root,QIODevice & IO)

对TAR档IO文件的内部包含文件进行列表。


bool List(QDir root,QString filename)

对TAR档file文件的内部包含文件进行列表。


bool Extract(QDir root,QIODevice & IO)

对TAR档IO文件的内部包含文件进行解开。


bool Extract(QDir root,QString filename)

对TAR档file文件的内部包含文件进行解开。


bool TarBall(QIODevice & IO,QDir root,QDir source,bool recursive = true)

将目录source当中的所有文件进行TAR档IO文件执行封装。


bool TarBall(QString filename,QDir root,QDir source,bool recursive = true)

将目录source当中的所有文件进行TAR档filename文件执行封装。


bool Interval(void)

大部分较长的执行程序当中都会执行一次Interval()函式。如果您希望在执行解封或封装的时期,插入自己的中点处理功能,您应该继承这个函 式。一般在Qt当中,这个函式应该再去呼叫qApp->processEvents()。


void Report(void * hiddenFileInfo)

报告文件记录资讯。这个函式仅在对TAR进行ListFile文件列表时被呼叫。内定没有做任何事,您需要继承这个函式来列出文件资讯。


bool ListFile(QDir root,QIODevice & IO,void * hiddenFileInfo)

由IO文件中,抽取hiddenFileInfo文件,并且呼叫Report来列出文件资讯。


bool Extract(QDir root,QIODevice & IO,void * hiddenFileInfo)

由IO文件中,抽取hiddenFileInfo文件,并且分配相对应的处理方式。


bool Read(QIODevice & IO,QByteArray & data,qint64 size)

由IO文件中读取size位元组的数据到data当中,IO文件一般是TAR档。


bool Skip(QIODevice & IO,qint64 size)

相等于 IO . seek ( IO.pos() + size ) 。

一般用于TAR文件列表时,快速跳过不需要读取的部分。


bool Write(QIODevice & IO,QByteArray & data)

将数据写入IO文件中,一般是TAR文件。


bool WriteClose(QIODevice & IO)

关闭IO文件,一般是TAR文件。


bool WriteFile(QIODevice & IO,QFileInfo & file)

将文件file写入IO文件中,一般是读取硬碟中的文件写入TAR文件中。


bool ExtractFile(QDir root,QIODevice & IO,void * hiddenFileInfo)

创建并处理正常文件资讯。


bool ExtractDir(QDir root,QIODevice & IO,void * hiddenFileInfo)

创建并处理目录资讯。


bool ExtractLink(QDir root,QIODevice & IO,void * hiddenFileInfo)

创建并处理Symbolic link档资讯。


bool ExtractDEVs(QDir root,QIODevice & IO,void * hiddenFileInfo)

创建并处理设备档资讯。


bool ExtractNext(QDir root,QIODevice & IO,void * hiddenFileInfo)

处理S-TAR In封包。


bool ExtractEXT(QDir root,QIODevice & IO,void * hiddenFileInfo)

处理S-TAR Extended封包。


bool setFileTime(QDir root,QIODevice & IO,void * hiddenFileInfo)

设定文件的创建日期及最后修改日期。


bool setFileMode(QDir root,QIODevice & IO,void * hiddenFileInfo)

设定文件的存取权限等相关资讯。


QFileInfoList Listing(QDir & root,QDir source)

扫描source目录当中的文件列表。


bool WriteTAR(QIODevice & IO,QDir & root,QFileInfo & file)

将正常文件file写入TAR文件中。


bool ToHiddenFileInfo(QDir & root,QFileInfo & file,void * hiddenFileInfo)

将QFileInfo转换成文件记录资讯。


void * NewHiddenFile(void)

配置文件记录资讯。使用者需要继承这个函式,并自行配置用户定义的等价资料结构。


void CleanHiddenFile(void * hiddenFileInfo)

清除文件记录资讯。



HiddenFileTypes 列举

HiddenFileTypes是文件类型的列举型态。

您必须定义ENABLE_HIDDEN_FILE_INFO_STRUCTURE才能使用这个隐藏的定义,一般而言不建议您这样做。建议的方式为 自行定义一个等价的列举及资料结构。

名称

涵意
None
0
无。
Regular
1
正常文件。
Link
2
Symbolic link文件。
Symbol
3
Symbol设备档。
Char
4
Char设备档。
Block
5
Block设备档。
Directory
6
目录。
FIFO
7
FIFO设备档。
Reserved
8
保留使用。
Next
9
S-TAR的下个封包记号。
Extended
10
S-TAR Extended封包。


HiddenFileInfo 资料结构

HiddenFileInfo是一个文件相关资讯记录。

您必须定义ENABLE_HIDDEN_FILE_INFO_STRUCTURE才能使用这个隐藏的定义,一般而言不建议您这样做。建议的方式为 自行定义一个等价的列举及资料结构。

typedef struct HiddenFileInfo {
  bool            Archive     ; /* inside a Tar file or Zip file, and so on */
  QString         Root        ; /* Root directory or tarball name */
  QString         Filename    ; /* Filename or directory name of this entry */
  QString         System      ; /* Normally, this is operation system */
  qint64          mode        ; /* Unix only */
  qint64          uid         ; /* Unix only */
  qint64          gid         ; /* Unix only */
  qint64          size        ; /* File size, for directory, it is 0 */
  QDateTime       Time        ; /* Creation time */
  QDateTime       Lastest     ; /* Last modified */
  QString         CheckSum    ; /* CheckSum of this file */
  HiddenFileTypes Type        ; /* File Type */
  QString         LinkName    ; /* Unix only */
  QString         uname       ; /* Unix only */
  QString         gname       ; /* Unix only */
  qint64          Major       ; /* Unix only */
  qint64          Minor       ; /* Unix only */
  QString         Prefix      ; /* Normally, this is prefix directory */
  QString         Comment     ; /* This is from GZIP format, however, sometimes it is useful */
} HiddenFileInfo              ;


Neutrino International Inc. 2001~2015