- 相關(guān)軟件
>如何將一個文件分割成多個小文件 創(chuàng)建者:webmaster 更新時間:2005-05-17 23:57
你也許會遇到到這樣一個問題?當你有一個較大的軟件,而無法用一張軟盤將其全部拷下時,你也許會想到該將它分解開,分盤拷回去后,再將它們合并起來?,F(xiàn)在的這種分割工具很多,你想自己動手做一個適合自己的分割工具么?下面就讓我用以前用VC做的一個<袖珍文件分割器>的例程來告訴你吧!程序運行后界面如下圖:
基本構(gòu)成思想:文件分割的基本思想比我之前發(fā)表的另一篇文章既綰謂喔鑫募喜⑽桓隹芍蔥諧絳潁鏡墓鉤傷枷爰虻ザ嗔耍饕卜治指釵募禿喜⒎指詈蟮奈募蟛糠幀7指釵募?,将原文件按指定分府岓小进行荡_鄭緩笏承蚨寥∑渲付ǚ指畬笮∈鶯蟮叫吹礁髯緣男陸ㄎ募?。合并文件,将各分割后的文件顺序读取后,写葰杞一个文件中既總?
1、分割文件時:打開文件,讀取指定的分割大小一段數(shù)據(jù),寫入到一新建文件中,接著再讀同樣大小的一段數(shù)據(jù),再寫入到一新建文件中……,直到讀出文件最后一部分數(shù)據(jù),寫入到最后一個新建文件中。對每一個分割后的新建文件名,采用原文件名前加數(shù)字信息的方法,按分割的順序,按個加上一數(shù)字標識信息,以便合并時使用。
分割文件的部分代碼實現(xiàn)如下:
//文件分割涵數(shù)
int CFileSpltDlg::SplitMe()
{
…… (省略:此部分代碼實現(xiàn)省略掉)
//分割文件
do {
//動態(tài)建立一個新建文件名的前的數(shù)字
name = _ltoa(l, buff, 10);
name += _T("_");
CString newpath;
//判斷選擇目錄未尾是否已有"\"符
if(m_targetpath.Right(1)=='\\')
newpath = m_targetpath;
else
newpath = m_targetpath + _T("\\");
if (!destFile.Open(newpath + name + m_SourceFile.GetFileName(),
CFile::modeWrite |
CFile::shareExclusive |
CFile::typeBinary |
CFile::modeCreate, &ex)) {
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
::AfxMessageBox(szError);
m_SourceFile.Close();
return 1;
}
do {
dwRead = m_SourceFile.Read(buffer, nCount);
destFile.Write(buffer, dwRead);
}//當文件小于指定要分割的大小時
while (dwRead > 0 && destFile.GetLength() < newlen);
destFile.Close();
l++;
UpdateWindow();
}while (dwRead > 0);
m_SourceFile.Close();
return 0;
}
2、合并文件時:和上面分割所采用的方法相反,將各個分割后的小文件讀出后,按其分割后文件名前數(shù)字大小的順序,按個寫入到新建的文件中,這一新建文件的名字,為去掉分割后文件前面數(shù)字部分后的文件名(既原文件名)。
合并文件的部分代碼實現(xiàn)如下:
// 文件合并涵數(shù)
int CFileSpltDlg::MergeMe()
{
…… (省略:此部分代碼實現(xiàn)省略掉)
//開始合并文件
do {
//自動定位分割文件名前的數(shù)字信息
pref = _ltoa(l, buff, 10);
pref += _T("_");
//打開新的分割文件
if (!m_SourceFile.Open(newpath + pref + m_filename,
CFile::modeRead |
CFile::shareExclusive |
CFile::typeBinary, &ex)) {
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
destFile.Close();
m_path = _T("");
m_filename = _T("");
newpath = _T("");
UpdateData(FALSE);
return 0;
}
else
//形成一個新的文件名
name = _T(newpath + pref + m_filename);
do {//寫入到目標文件中
dwRead = m_SourceFile.Read(buffer, nCount);
destFile.Write(buffer, dwRead);
}while (dwRead > 0);
m_SourceFile.Close();
l++;
UpdateWindow();
}while (l < 500);//little bit dirty solution, but you can always improve it!...
return 0;
}
以上各部分代碼的具體實現(xiàn),請在下載例程后,參看源代碼既可。
聯(lián)系方式:
地址:陜西省西安市勞動路2號院六單元
郵編:710082
作者EMAIL:jingzhou_xu@163.net相關(guān)文章
本頁查看次數(shù):