{
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
bool isBlock(QByteArray & block)
bool isPadding(QByteArray & block)
檢查是否為填空封包。
qint64 FileBlocks(qint64 size)
int Checksum(QByteArray & block,char replace = ' ')
計算TAR封包512位元組的Checksum值。
bool Extract(QByteArray & block,void * hiddenFileInfo)
bool Bale(void * hiddenFileInfo,QByteArray & data)
將檔案記錄資訊封裝為TAR封包數據。
QString toOct(int checksum)
void PackOct(char * buf,qint64 size,int length)
qint64 FromOct(char * buf,int length)
將buf以八進位格式轉換成qint64。
void Copy(char * buf,QString string)
將string字串複製到buf當中。
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)
bool List(QDir root,QString filename)
對TAR檔file檔案的內部包含檔案進行列表。
bool Extract(QDir root,QIODevice & IO)
bool Extract(QDir root,QString filename)
對TAR檔file檔案的內部包含檔案進行解開。
bool TarBall(QIODevice & IO,QDir root,QDir source,bool recursive = true)
bool TarBall(QString filename,QDir root,QDir source,bool recursive = true)
將目錄source當中的所有檔案進行TAR檔filename檔案執行封裝。
bool Interval(void)
void Report(void * hiddenFileInfo)
報告檔案記錄資訊。這個函式僅在對TAR進行ListFile檔案列表時被呼叫。內定沒有做任何事,您需要繼承這個函式來列出檔案資訊。
bool ListFile(QDir root,QIODevice & IO,void * hiddenFileInfo)
bool Extract(QDir root,QIODevice & IO,void * hiddenFileInfo)
由IO檔案中,抽取hiddenFileInfo檔案,並且分配相對應的處理方式。
bool Read(QIODevice & IO,QByteArray & data,qint64 size)
bool Skip(QIODevice & IO,qint64 size)
bool Write(QIODevice & IO,QByteArray & data)
bool WriteClose(QIODevice & IO)
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)
bool ExtractDEVs(QDir root,QIODevice & IO,void * hiddenFileInfo)
bool ExtractNext(QDir root,QIODevice & IO,void * hiddenFileInfo)
bool ExtractEXT(QDir root,QIODevice & IO,void * hiddenFileInfo)
bool setFileTime(QDir root,QIODevice & IO,void * hiddenFileInfo)
bool setFileMode(QDir root,QIODevice & IO,void * hiddenFileInfo)
設定檔案的存取權限等相關資訊。
QFileInfoList Listing(QDir & root,QDir source)
bool WriteTAR(QIODevice & IO,QDir & root,QFileInfo & file)
bool ToHiddenFileInfo(QDir & root,QFileInfo & file,void * hiddenFileInfo)
將QFileInfo轉換成檔案記錄資訊。
void * NewHiddenFile(void)
void CleanHiddenFile(void * hiddenFileInfo)
清除檔案記錄資訊。
名稱 |
值 |
涵意 |
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封包。 |
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 ;