文件分割与合并实现
// 文件合并函数
int CFileSpltDlg::MergeMe() {
CWaitCursor wait;
CFile destFile;
CFileException ex;
BYTE buffer[140000];
DWORD dwRead;
UINT nCount = 140000;
UINT newlen = 1400000;
char buff[20];
long l = 1;
CString name, pref, newpath;
UpdateData(TRUE);
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;
}
m_filename = m_path.Right(m_path.GetLength() - m_path.ReverseFind('') - 1);
m_SourceFile.Close();
}
newpath = m_path.Left(m_path.GetLength() - m_filename.GetLength());
if (!m_targetpath.IsEmpty()) {
if (!m_filename.IsEmpty() && m_filename.Left(2) != _T("1_")) {
::AfxMessageBox(_T("待合并的源文件名不对..."), MB_ICONERROR);
return 1;
} else if (m_filename.IsEmpty()) {
MessageBox(_T("请选择待合并的源文件."), _T("文件分割器"), MB_ICONEXCLAMATION);
return 1;
}
m_filename = m_filename.Right(m_filename.GetLength() - 2);
m_path = m_targetpath.Right(1) == '' ? m_targetpath + m_filename : m_targetpath + _T("") + m_filename;
if (!destFile.Open(m_path, CFile::modeWrite | CFile::shareExclusive | CFile::typeBinary | CFile::modeCreate, &ex)) {
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
::AfxMessageBox(szError);
return 0;
}
} else if (m_path.IsEmpty()) {
MessageBox(_T("请选择待合并的源文件."), _T("文件分割器"), MB_ICONEXCLAMATION);
return 1;
}
if (m_targetpath.IsEmpty()) {
MessageBox(_T("请选择合并后要保存到的目标文件夹."), _T("文件分割器"), MB_ICONEXCLAMATION);
return 1;
}
do {
pref = _ltoa(l, buff, 10) + _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("");
UpdateData(FALSE);
return 0;
}
do {
dwRead = m_SourceFile.Read(buffer, nCount);
destFile.Write(buffer, dwRead);
} while (dwRead > 0);
m_SourceFile.Close();
for (int i = 0; i < 500> m_parts = _ltoa(l, buff, 10) + _T("个文件已合并");
UpdateData(FALSE);
l++;
UpdateWindow();
} while (l < 500> return 0;
}
// 文件分割函数
int CFileSpltDlg::SplitMe() {
CWaitCursor wait;
CFile destFile;
CFileException ex;
DWORD dwRead;
UINT newlen;
char buff[20], 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) + _T("_");
CString newpath = m_targetpath.Right(1) == '' ? m_targetpath : 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) + _T("个文件生成");
UpdateData(FALSE);
l++;
UpdateWindow();
} while (dwRead > 0);
m_SourceFile.Close();
m_path = _T("");
m_filename = _T("");
UpdateData(FALSE);
return 0;
}
int CFileSpltDlg::MergeMe() {
CWaitCursor wait;
CFile destFile;
CFileException ex;
BYTE buffer[140000];
DWORD dwRead;
UINT nCount = 140000;
UINT newlen = 1400000;
char buff[20];
long l = 1;
CString name, pref, newpath;
UpdateData(TRUE);
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;
}
m_filename = m_path.Right(m_path.GetLength() - m_path.ReverseFind('') - 1);
m_SourceFile.Close();
}
newpath = m_path.Left(m_path.GetLength() - m_filename.GetLength());
if (!m_targetpath.IsEmpty()) {
if (!m_filename.IsEmpty() && m_filename.Left(2) != _T("1_")) {
::AfxMessageBox(_T("待合并的源文件名不对..."), MB_ICONERROR);
return 1;
} else if (m_filename.IsEmpty()) {
MessageBox(_T("请选择待合并的源文件."), _T("文件分割器"), MB_ICONEXCLAMATION);
return 1;
}
m_filename = m_filename.Right(m_filename.GetLength() - 2);
m_path = m_targetpath.Right(1) == '' ? m_targetpath + m_filename : m_targetpath + _T("") + m_filename;
if (!destFile.Open(m_path, CFile::modeWrite | CFile::shareExclusive | CFile::typeBinary | CFile::modeCreate, &ex)) {
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
::AfxMessageBox(szError);
return 0;
}
} else if (m_path.IsEmpty()) {
MessageBox(_T("请选择待合并的源文件."), _T("文件分割器"), MB_ICONEXCLAMATION);
return 1;
}
if (m_targetpath.IsEmpty()) {
MessageBox(_T("请选择合并后要保存到的目标文件夹."), _T("文件分割器"), MB_ICONEXCLAMATION);
return 1;
}
do {
pref = _ltoa(l, buff, 10) + _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("");
UpdateData(FALSE);
return 0;
}
do {
dwRead = m_SourceFile.Read(buffer, nCount);
destFile.Write(buffer, dwRead);
} while (dwRead > 0);
m_SourceFile.Close();
for (int i = 0; i < 500> m_parts = _ltoa(l, buff, 10) + _T("个文件已合并");
UpdateData(FALSE);
l++;
UpdateWindow();
} while (l < 500> return 0;
}
// 文件分割函数
int CFileSpltDlg::SplitMe() {
CWaitCursor wait;
CFile destFile;
CFileException ex;
DWORD dwRead;
UINT newlen;
char buff[20], 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) + _T("_");
CString newpath = m_targetpath.Right(1) == '' ? m_targetpath : 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) + _T("个文件生成");
UpdateData(FALSE);
l++;
UpdateWindow();
} while (dwRead > 0);
m_SourceFile.Close();
m_path = _T("");
m_filename = _T("");
UpdateData(FALSE);
return 0;
}
分割合并文件.zip
预估大小:25个文件
FileSplt
文件夹
resource.h
1KB
FileSplt.rc
7KB
FileSpltDlg.cpp
15KB
FileSplt.dsw
539B
ReadMe.txt
493B
res
文件夹
FileSplt.rc2
400B
ButtonsWin3000.bmp
18KB
Button1.bmp
5KB
33.33KB
文件大小:
评论区