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