SelfExtractor自解壓模組理解文檔

來源:互聯網
上載者:User

SelfExtractor理解文檔

 九天雁翎:blog.jtianling.cn

ReadToc(CString Filename)

首先從檔案尾反向Seek一個strlen(檔案標誌)的距離,然後讀取檔案標誌,判斷此檔案標誌.錯誤即返回INVALID_SIG.

然後再從檔案尾反向Seek一個strlen(檔案標誌)+sizeof(int)的距離,讀取一個整數,此整數代表檔案數量.當其為0,即返回NOTHING_TO_DO,

 

然後根據檔案數量,迴圈依次反向的Seek,讀取檔案名稱長度,檔案名稱,檔案長度,檔案在文檔中的位移值.將各檔案的資訊儲存在m_InfoArray數組中,將最後得到的位移值,儲存在m_nTOCSize中,此位移值即整個文檔頭的大小.

 

 

int CSelfExtractor::ExtractOne(CFile* file, int index, CString Dir);

通過m_InfoArray中的資料,讀入,並寫入建立的新檔案;寫入時一次寫1000位元組,沒有1000位元組即寫入剩下大小.

 

int CSelfExtractor::ExtractAll(CString Dir, funcPtr pFn /*= NULL*/, void * userData /*= NULL*/)

首先讀取文檔頭,得到儲存有檔案資訊的m_InfoArray數組,然後依據此數組,分別調用ExtractOne解壓到磁碟上,解壓後還可以調用funcPtr類型的使用者定義函數.

 

int CSelfExtractor::CreateArchive(CFile* pFile, funcPtr pFn, void* userData)

先分別從m_InfoArray數組中讀入檔案的資訊,並從外部讀入,寫入到文檔中,

然後寫文檔頭

 

 

int CSelfExtractor::Create(UINT resource, CString Filename, funcPtr pFn /* = NULL */, void* userData /*=NULL*/)

分別用FindResource,LoadResource,LockResource函數讀入執行檔案資源.

將整個執行檔案全部寫入新建立的檔案.調用CreateArchive完成接下來的檔案的寫入.

 

int CSelfExtractor::Create(CString ExtractorPath, CString Filename, funcPtr pFn /* = NULL */, void* userData /*=NULL*/)

不是以資源形式給出可執行檔時:

先利用   

CShellFileOp shOp;

       shOp.SetFlags(FOF_FILESONLY | FOF_NOCONFIRMATION | FOF_SILENT);

       shOp.AddFile(SH_SRC_FILE, ExtractorPath);

       shOp.AddFile(SH_DEST_FILE, Filename);

       if(shOp.CopyFiles() != 0)

              return COPY_FAILED;

來完成從一個使用者指定可執行檔到建立立文檔的複製,接著還是利用調用CreateArchive完成接下來的檔案的寫入.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.