由於程式中需要把整個目錄打包,所以自己寫了打包和解包函式,我對此打包檔案的布局設計如下:
20位元組:表明目錄結構的起點
……
目錄結構起點(前
20個位元組標明的):
檔案內容起點:
檔案fd結構
檔案fd結構
檔案內容
檔案內容
目錄fd結構
目錄fd結構
目錄fd結構
……
20位元組:表明目錄結構的起點
……
目錄結構起點(前20個位元組標明的):
檔案內容起點:
檔案fd結構
檔案fd結構
檔案內容
檔案內容
目錄fd結構
目錄fd結構
目錄fd結構
……
上述的fd結構其實就是:
typedef struct stfd
fd;
打包函式:
void packdir(lpctstr lpszdir, lpctstr lpszoutputfile)
// 建立打包檔案
cfile packfile;
if(!packfile.open(lpszoutputfile, cfile::modecreate|cfile::modereadwrite, null))
// 先把檔案開始的noffset個位元組佔住,用於表示到目錄結構所要偏移的位元組數
packfile.seektobegin();
packfile.write(szcnt, noffset);
strlst.addtail(lpszdir);
while(!strlst.isempty())
// 找到檔案
packfile.seektoend();
// 將檔案結構寫進
packfile.write(&fdtmp, sizeof(fd));
// 將檔案內容寫進
pszfilecontent = new tchar[finder.getlength()];
if(!filetmp.open(finder.getfilepath(), cfile::moderead, null))
filetmp.read(pszfilecontent, finder.getlength());
packfile.write(pszfilecontent, finder.getlength());
delete pszfilecontent;}}
strlst.removehead();
}// 在開始的noffset個位元組處寫進目錄結構偏移量
dword dwcnt = packfile.seektoend();
sprintf(szcnt, "%ld", dwcnt);
packfile.seektobegin();
packfile.write(szcnt, noffset);
// 去到最後寫進目錄結構
packfile.seektoend();
for(int i = 0; i < vdirfd.size(); i++)
packfile.close();
}解包函式:
void unpackdir(lpctstr lpszinputfile, lpctstr lpszdir)
// 先建立目錄結構
memset(szcnt, 0, noffset);
fileinput.read(szcnt, noffset);
noff = atoi(szcnt);
// 去到檔案目錄結構的起點
fileinput.seek( noff, cfile::begin );
while(!isfileend(fileinput))
// 再把檔案建立好
dwcurpos = fileinput.seek(noffset, cfile::begin);
cfile filetmp;
while(dwcurpos < noff)
// 把內容複製過去
pszfilecontent = new tchar[fdtmp.nsize];
fileinput.read(pszfilecontent, fdtmp.nsize);
filetmp.seektobegin();
filetmp.write(pszfilecontent, fdtmp.nsize);
delete pszfilecontent;
// 把檔案的屬性改變,先關閉再改
filetmp.close();
cfilestatus rstatus;
ctime ctime(fdtmp.ctime);
ctime atime(fdtmp.atime);
ctime mtime(fdtmp.mtime);
rstatus.m_atime = atime;
rstatus.m_ctime = ctime;
rstatus.m_mtime = mtime;
rstatus.m_attribute = (byte)fdtmp.attribute;
rstatus.m_size = fdtmp.nsize;
lstrcpy(rstatus.m_szfullname, strfile);
cfile::setstatus(strfile, rstatus);
dwcurpos = fileinput.getposition();
}fileinput.close();
}還有乙個判斷是否到了檔案末尾的函式:
bool isfileend(cfile &file)
return true;
}
tar打包和解包
tar這個命令用了上百次,每次用之前都需要再確認一遍。雖然是很簡單的命令,但是對於乙個每天要想很多事情的老年人來說,要精準記住每個引數還真不是件容易的事,索性寫下來,下次開啟博文照做就好了,呵呵 打包 tar zcvf file.tar.gz file1 file2 file2 tar jcvf f...
python中 和 的打包和解包
python中的 和 能夠讓函式支援任意數量的引數,它們在函式定義和呼叫中,有著不同的目的 一.打包引數 的作用 在函式定義中,收集所有的位置引數到乙個新的元組,並將這個元組賦值給變數args def f args print args f f 1 1,f 1,2,3,4 1,2,3,4 的作用 在...
打包和解包彙總 gz bz2 xz zip
gz tar xvzf abc.tar.gz gz壓縮的解包 打包 tar cvzf abc.tar.gz abc.txt bz2 tar xvjf abc.tar.bz2 bz2格式的解包 打包 tar cvjf abc.tar.bz2 abc.txt xz 先xz d abc.tar.xz 然後...