分类:
2008-09-17 11:04:47
long CFileSpltDlg::GetSplitFileSize()
//获取用户选择文件分割后的大小
{
char buf[100];
m_FileSize.GetWindowText(buf,100);
for(int i=0; i<(int)strlen(buf); i++)
{
if(!::isdigit(buf[i]))
{
MessageBox("请输入数字!","文件分割",
MB_ICONEXCLAMATION);
return 0;
}
}
return atoi(buf)*1000000;
}
int CFileSpltDlg::SplitMe() //文件分割涵数
{
CWaitCursor wait;
CFile destFile;
CFileException ex;
DWORD dwRead;
UINT newlen;
char buff [20];
char b [20];
long l = 1;
CString name;
UINT len = 0;
UpdateData(TRUE);
newlen=GetSplitFileSize();
//获取文件分割后的大小,定义相对应变量数值
UINT nCount = newlen/10;
BYTE buffer[140000];
if (!m_path.IsEmpty())
{
if (!m_SourceFile.Open(m_path, CFile::modeRead |
CFile::shareDenyNone| CFile::typeBinary, &ex))
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
::AfxMessageBox(szError);
m_edit.SetFocus();
m_edit.SetSel(0, -1);
return 1;
}
len = m_SourceFile.GetLength();
}
else
{
MessageBox(_T("请选择待分割的源文件."),
_T("文件分割器"), MB_ICONEXCLAMATION);
return 1;
}
if (m_targetpath.IsEmpty())
{
MessageBox(_T("请选择分割后保存到的目标文件夹."),
_T("文件分割器"),MB_ICONEXCLAMATION);
return 1;
}
if (len < newlen)
{
CString length = _itoa(len, b, 10);
MessageBox(_T("文件长度为 " + length +
" 字节,不够指定的分割大小, 没有必要再进行分割."),
_T("文件分割器"), MB_ICONEXCLAMATION);
m_SourceFile.Close();
m_path = _T("");
m_filename = _T("");
UpdateData(FALSE);
return 1;
}
do {
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();
pProgress.SetRange(0, len /newlen*10);
pProgress.SetPos(l);
m_parts = _ltoa(l , buff, 10);
m_parts += _T("个文件生成");
UpdateData(FALSE);
l++;
UpdateWindow();
}while (dwRead > 0);
m_SourceFile.Close();
m_path = _T("");
m_filename = _T("");
UpdateData(FALSE);
return 0;
}