www.pudn.com > 多线程文件分割软件.rar > SplitFileDlg.cpp


// SplitFileDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "SplitFile.h" 
#include "SplitFileDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CAboutDlg dialog used for App About 
CList  m_Split_Merge_FileList; 
class CAboutDlg : public CDialog 
{ 
public: 
	CAboutDlg(); 
 
// Dialog Data 
	//{{AFX_DATA(CAboutDlg) 
	enum { IDD = IDD_ABOUTBOX }; 
	CColorButton	m_btnOk; 
	//}}AFX_DATA 
 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CAboutDlg) 
	protected: 
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support 
	//}}AFX_VIRTUAL 
 
// Implementation 
protected: 
	//{{AFX_MSG(CAboutDlg) 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 
{ 
	//{{AFX_DATA_INIT(CAboutDlg) 
	//}}AFX_DATA_INIT 
} 
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CAboutDlg) 
	DDX_Control(pDX, IDOK, m_btnOk); 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 
	//{{AFX_MSG_MAP(CAboutDlg) 
		// No message handlers 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CSplitFileDlg dialog 
 
CSplitFileDlg::CSplitFileDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CSplitFileDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CSplitFileDlg) 
	//}}AFX_DATA_INIT 
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
} 
 
void CSplitFileDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CSplitFileDlg) 
	DDX_Control(pDX, IDC_BUTTON1, m_stop); 
	DDX_Control(pDX, IDC_PROGRESS1, m_pg); 
	DDX_Control(pDX, IDC_BTN_SPLITFILEDIR, m_btnBrowseSplitFileDir); 
	DDX_Control(pDX, IDC_BTN_SPLITFILE, m_btnSplitFile); 
	DDX_Control(pDX, IDC_BTN_MERGEFILE, m_btnMergeFile); 
	DDX_Control(pDX, IDC_BTN_BROWSESPLITFILE, m_btnBrowseSplitFile); 
	DDX_Control(pDX, IDC_BTN_BROWSEMERGEFILE, m_btnBrowseMergeFile); 
	DDX_Control(pDX, IDC_EDIT_SPLITTOCOPIES, m_edtSplitCopies); 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CSplitFileDlg, CDialog) 
	//{{AFX_MSG_MAP(CSplitFileDlg) 
	ON_WM_SYSCOMMAND() 
	ON_WM_PAINT() 
	ON_WM_QUERYDRAGICON() 
	ON_BN_CLICKED(IDC_BTN_SPLITFILE, OnBtnSplitfile) 
	ON_BN_CLICKED(IDC_BTN_MERGEFILE, OnBtnMergefile) 
	ON_BN_CLICKED(IDC_BTN_BROWSESPLITFILE, OnBtnBrowsesplitfile) 
	ON_BN_CLICKED(IDC_BTN_BROWSEMERGEFILE, OnBtnBrowsemergefile) 
	ON_EN_CHANGE(IDC_EDIT_SRCFILE, OnChangeEditSrcfile) 
	ON_EN_CHANGE(IDC_EDIT_SPLITTOCOPIES, OnChangeEditSplittocopies) 
	ON_BN_CLICKED(IDC_BTN_SPLITFILEDIR, OnBtnSplitfiledir) 
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CSplitFileDlg message handlers 
 
BOOL CSplitFileDlg::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
	// Add "About..." menu item to system menu. 
 
	// IDM_ABOUTBOX must be in the system command range. 
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 
	ASSERT(IDM_ABOUTBOX < 0xF000); 
 
	CMenu* pSysMenu = GetSystemMenu(FALSE); 
	if (pSysMenu != NULL) 
	{ 
		CString strAboutMenu; 
		strAboutMenu.LoadString(IDS_ABOUTBOX); 
		if (!strAboutMenu.IsEmpty()) 
		{ 
			pSysMenu->AppendMenu(MF_SEPARATOR); 
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 
		} 
	} 
 
	// Set the icon for this dialog.  The framework does this automatically 
	//  when the application's main window is not a dialog 
	SetIcon(m_hIcon, TRUE);			// Set big icon 
	SetIcon(m_hIcon, FALSE);		// Set small icon 
	 
	// TODO: Add extra initialization here 
	m_stop.EnableWindow(FALSE); 
	return TRUE;  // return TRUE  unless you set the focus to a control 
} 
 
void CSplitFileDlg::OnSysCommand(UINT nID, LPARAM lParam) 
{ 
	if ((nID & 0xFFF0) == IDM_ABOUTBOX) 
	{ 
		CAboutDlg dlgAbout; 
		dlgAbout.DoModal(); 
	} 
	else 
	{ 
		CDialog::OnSysCommand(nID, lParam); 
	} 
} 
 
// If you add a minimize button to your dialog, you will need the code below 
//  to draw the icon.  For MFC applications using the document/view model, 
//  this is automatically done for you by the framework. 
 
void CSplitFileDlg::OnPaint()  
{ 
	if (IsIconic()) 
	{ 
		CPaintDC dc(this); // device context for painting 
 
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); 
 
		// Center icon in client rectangle 
		int cxIcon = GetSystemMetrics(SM_CXICON); 
		int cyIcon = GetSystemMetrics(SM_CYICON); 
		CRect rect; 
		GetClientRect(&rect); 
		int x = (rect.Width() - cxIcon + 1) / 2; 
		int y = (rect.Height() - cyIcon + 1) / 2; 
 
		// Draw the icon 
		dc.DrawIcon(x, y, m_hIcon); 
	} 
	else 
	{ 
		CDialog::OnPaint(); 
	} 
} 
 
// The system calls this to obtain the cursor to display while the user drags 
//  the minimized window. 
HCURSOR CSplitFileDlg::OnQueryDragIcon() 
{ 
	return (HCURSOR) m_hIcon; 
} 
 
BOOL SaveSplitFileInfo(CString szFileName) 
{ 
	if(m_Split_Merge_FileList.GetCount() < 1) 
	{ 
		return FALSE; 
	} 
 
	CFile file; 
	 
	if(file.Open(szFileName, CFile::modeCreate | CFile::modeWrite)) 
	{ 
		CArchive arStore(&file, CArchive::store); 
		 
		m_Split_Merge_FileList.Serialize(arStore); 
		 
		arStore.Close(); 
		file.Close(); 
 
		return TRUE; 
	} 
 
	return FALSE; 
} 
 
void SplitFile(LPVOID param) 
{ 
	CString szFileName; 
	int nCopies; 
	CString szDir; 
    CSplitFileDlg* dpthis; 
	dpthis=(CSplitFileDlg*)param; 
	DBpa dp=dpthis->pa; 
	szFileName.Format("%s",dp.filename); 
	szDir.Format("%s",dp.path); 
	nCopies=dp.cd; 
	dpthis->m_btnSplitFile.EnableWindow(FALSE); 
	dpthis->m_stop.EnableWindow(TRUE); 
	 
	//((CButton*)GetDlgItem(AfxGetMainWnd()->m_hWnd,IDC_BUTTON1))->EnableWindow(TRUE); 
	//((CButton*)::GetDlgItem(AfxGetMainWnd()->m_hWnd,IDC_BUTTON1))->EnableWindow(TRUE); 
	//((CProgressCtrl*)GetDlgItem(AfxGetMainWnd()->m_hWnd,IDC_PROGRESS1))->SetRange(0,nCopies); 
    //((CProgressCtrl*)GetDlgItem(AfxGetMainWnd()->m_hWnd,IDC_PROGRESS1))->SetPos(0); 
	if(szFileName.IsEmpty() || (nCopies < 2)) 
	{ 
		 
	} 
 
	int i,nPos; 
	int nSplitFileCount = 0; 
	DWORD dwFileLen; 
	DWORD dwReadSize,dwLeftSize; 
	CString szSplitFileName(""),szSplitFile(""); 
	CString szFile(""); 
	char *pszBuff = NULL; 
	SPLIT_MERGE_FILE splitfile; 
	CFile fileRead,fileWrite; 
 
	if(!fileRead.Open(szFileName, CFile::modeRead | CFile::shareExclusive)) 
	{ 
		 
	} 
 
	dwFileLen = fileRead.GetLength(); 
	dwReadSize = dwFileLen / nCopies; 
	dwLeftSize = dwFileLen - dwReadSize * (nCopies - 1); 
 
	nPos = szFileName.ReverseFind('\\'); 
	if(nPos != -1) 
	{ 
		szFile = szFileName.Right(szFileName.GetLength() - nPos - 1); 
	} 
 
	fileRead.SeekToBegin(); 
     
	//写 nCopies-1 个分解文件 
	for(i=1; im_hWnd,IDC_PROGRESS1))->Set(i); 
			//(CStatic*)SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_STAT,"33"); 
			delete []pszBuff; 
			pszBuff = NULL; 
		} 
		dpthis->m_pg.SetPos(i); 
	} 
 
	//写第 nCopies 个分解文件 
	pszBuff = new char[dwLeftSize]; 
	if(NULL != pszBuff) 
	{ 
		fileRead.ReadHuge(pszBuff, dwLeftSize); 
		szSplitFileName.Format(_T("%s.X%d"), szFileName, nCopies); 
		nPos = szSplitFileName.ReverseFind('\\'); 
		 
		if(nPos != -1) 
		{ 
			szSplitFile = szSplitFileName.Right(szSplitFileName.GetLength() - nPos - 1); 
			szSplitFileName.Format(_T("%s%s"), szDir, szSplitFile); 
		} 
		 
		if(fileWrite.Open(szSplitFileName, CFile::modeCreate | CFile::typeBinary | CFile::modeWrite | CFile::shareExclusive)) 
		{ 
			sprintf(splitfile.szFileName, "%s", szSplitFile); 
			m_Split_Merge_FileList.AddTail(splitfile); 
 
			fileWrite.WriteHuge(pszBuff, dwLeftSize); 
			fileWrite.Close(); 
		} 
         
		delete []pszBuff; 
		pszBuff = NULL; 
	} 
 
	szSplitFileName.Format(_T("%s%s.XX"), szDir, szFile); 
	SaveSplitFileInfo(szSplitFileName); 
 
	fileRead.Close(); 
	//((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(FALSE); 
	//((CButton*)::GetDlgItem(AfxGetMainWnd()->m_hWnd,IDC_BUTTON1))->EnableWindow(TRUE); 
	 
} 
 
void CSplitFileDlg::OnBtnSplitfile()  
{ 
	// TODO: Add your control notification handler code here 
	int nCopies; 
	CString szText(""),szFileName(""),szFile("");; 
	CString szPath(""); 
 
	((CEdit *)GetDlgItem(IDC_EDIT_SPLITTOCOPIES))->GetWindowText(szText); 
	((CEdit *)GetDlgItem(IDC_EDIT_SRCFILE))->GetWindowText(szFileName); 
	((CEdit *)GetDlgItem(IDC_EDIT_SPLITFILEDIR))->GetWindowText(szPath); 
	nCopies = ::atoi(szText); 
 
	if(!szPath.IsEmpty()) 
	{ 
		if(szPath.Right(1) != "\\") 
		{ 
			szPath += "\\"; 
		} 
	} 
 
	if(!DirExists(szPath)) 
	{ 
		if(LegalDir(szPath)) 
		{ 
			CreateAllDir(szPath); 
		} 
		else 
		{ 
			MessageBox("不能创建您提供的路径,请检查!", "分割提示", MB_OK + MB_ICONWARNING); 
 
			return; 
		} 
	} 
 
	if(nCopies > 1) 
	{ 
		 
		 
		pa.cd =nCopies; 
		char *fn=new char[50]; 
        fn=szFileName.GetBuffer(szFileName.GetLength()); 
 
		strcpy(pa.filename,fn); 
		strcpy(pa.path,szPath); 
		m_pg.SetRange(0,nCopies); 
	    m_pg.SetPos(0); 
		//pa.path =(char*)szPath.GetBuffer(szPath.GetLength()); 
		//SplitFile(szFileName, nCopies, szPath); 
		hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)SplitFile,(void*)this,0,&ThreadID); 
	} 
	else 
	{ 
		MessageBox("请输入两个以上的分割份数!", "分割提示", MB_OK + MB_ICONWARNING); 
	} 
} 
 
BOOL LoadSplitFileInfo(CString szFileName) 
{ 
	CFile file; 
	 
	if(file.Open(szFileName, CFile::modeRead | CFile::shareDenyWrite)) 
	{ 
		CArchive arLoad(&file, CArchive::load); 
		 
		m_Split_Merge_FileList.RemoveAll(); 
		m_Split_Merge_FileList.Serialize(arLoad); 
		arLoad.Close(); 
		file.Close(); 
 
		return TRUE; 
	} 
 
	return FALSE; 
} 
 
 
BOOL MergeFile(LPVOID param) 
{ 
	CSplitFileDlg* pa; 
	pa=(CSplitFileDlg*)param; 
	CString szSplitInfoFile=pa->szf; 
	if(!LoadSplitFileInfo(szSplitInfoFile)) 
	{ 
		return FALSE; 
	} 
 
	int nPos; 
	int nSplitFileCount = 0; 
	DWORD dwFileLen; 
	CFile fileRead,fileWrite; 
	char *pszBuff = NULL; 
	CString szFileName(""),szPath(""); 
	CString szTemp(""); 
	BOOL bRet = TRUE; 
	POSITION pos = NULL; 
 
	nSplitFileCount = m_Split_Merge_FileList.GetCount(); 
    //////// 
	pa->m_pg.SetRange(0,nSplitFileCount); 
	pa->m_pg.SetPos(0); 
	pa->m_btnMergeFile.EnableWindow(FALSE); 
	pa->m_stop.EnableWindow(TRUE); 
	//////// 
	if(nSplitFileCount < 2) 
	{ 
		return FALSE; 
	} 
 
	szTemp.Format(_T("%s"), szSplitInfoFile); 
	nPos = szTemp.ReverseFind('.'); 
 
	if(nPos != -1) 
	{ 
		szFileName = szTemp.Left(nPos); 
	} 
 
	if(!fileWrite.Open(szFileName, CFile::modeCreate | CFile::typeBinary | CFile::modeWrite | CFile::shareExclusive)) 
	{ 
		return FALSE; 
	} 
 
	nPos = szTemp.ReverseFind('\\'); 
 
	if(nPos != -1) 
	{ 
		szPath = szTemp.Left(nPos); 
	} 
    int k=0; 
	for(pos=m_Split_Merge_FileList.GetHeadPosition(); NULL!=pos;) 
	{ 
		SPLIT_MERGE_FILE splitfile; 
 
		splitfile = m_Split_Merge_FileList.GetNext(pos); 
		szFileName.Format(_T("%s\\%s"), szPath, splitfile.szFileName); 
//		dwFileLen = splitfile.dwFileSize; 
        pa->m_pg.SetPos(k); 
		k++; 
		if(!fileRead.Open(szFileName, CFile::modeRead | CFile::shareExclusive)) 
		{ 
			bRet = FALSE; 
			 
			break; 
		} 
		 
		dwFileLen = fileRead.GetLength(); 
		fileRead.SeekToBegin(); 
		pszBuff = new char[dwFileLen]; 
		 
		if(NULL != pszBuff) 
		{ 
			fileRead.ReadHuge(pszBuff, dwFileLen); 
			fileWrite.WriteHuge(pszBuff, dwFileLen); 
			fileRead.Close(); 
			DeleteFile(szFileName); 
			 
			delete []pszBuff; 
			pszBuff = NULL; 
		} 
	} 
 
	DeleteFile(szSplitInfoFile); 
	fileWrite.Close(); 
	 
	return bRet; 
} 
 
void CSplitFileDlg::OnBtnMergefile()  
{ 
	// TODO: Add your control notification handler code here 
	CString szFileName(""); 
 
	((CEdit *)GetDlgItem(IDC_EDIT_SPLITINFOFILE))->GetWindowText(szFileName); 
    szf=szFileName; 
	if(FileExists(szFileName)) 
	{ 
		//MergeFile(szFileName); 
		hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MergeFile,(void*)this,0,&ThreadID); 
	} 
	else 
	{ 
		MessageBox("文件不存在,请检查!", "合并提示", MB_OK + MB_ICONWARNING); 
	} 
} 
 
 
 
 
 
void CSplitFileDlg::OnBtnBrowsesplitfile()  
{ 
	// TODO: Add your control notification handler code here 
	const char szFilters[]="All Files (*.*)|*.*||"; 
	CWin2KFileDialog dlg(TRUE, "*.*", NULL,OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters); 
	 
	if(dlg.DoModal() == IDOK) 
	{ 
		CString szFile(""),szText(""); 
		DWORD dwFileSize; 
		CFile file; 
 
		szFile.Format(_T("%s"), dlg.GetPathName()); 
		((CEdit *)GetDlgItem(IDC_EDIT_SRCFILE))->SetWindowText(szFile); 
		((CStatic *)GetDlgItem(IDC_LBL_SRCFILESIZE))->SetWindowText(""); 
		((CEdit *)GetDlgItem(IDC_EDIT_SPLITTOCOPIES))->SetWindowText(""); 
		((CStatic *)GetDlgItem(IDC_LBL_SPLITFILESIZE))->SetWindowText(""); 
 
		if(file.Open(szFile, CFile::modeRead)) 
		{ 
			dwFileSize = file.GetLength(); 
			file.Close(); 
			szText.Format(_T("%d"), dwFileSize); 
			((CStatic *)GetDlgItem(IDC_LBL_SRCFILESIZE))->SetWindowText(szText); 
		} 
	}	 
} 
 
void CSplitFileDlg::OnBtnBrowsemergefile()  
{ 
	// TODO: Add your control notification handler code here 
	const char szFilters[]="Split info files (*.XX)|*.XX||"; 
	CWin2KFileDialog dlg(TRUE, "XX", NULL,OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters); 
	 
	if(dlg.DoModal() == IDOK) 
	{ 
		CString szFile(""); 
 
		szFile.Format(_T("%s"), dlg.GetPathName()); 
		((CEdit *)GetDlgItem(IDC_EDIT_SPLITINFOFILE))->SetWindowText(szFile); 
	}	 
} 
 
BOOL CSplitFileDlg::FileExists(CString szFileName) 
{ 
	CString szFile(""); 
	DWORD dwAttribute = -1; 
 
	szFile.Format(_T("%s"), szFileName); 
	dwAttribute = GetFileAttributes(szFile); 
 
	if((dwAttribute == -1)  
		|| (dwAttribute == FILE_ATTRIBUTE_DIRECTORY)) 
	{ 
		return FALSE; 
	} 
 
	return TRUE; 
} 
 
void CSplitFileDlg::OnChangeEditSrcfile()  
{ 
	int nPos; 
	DWORD dwFileSize; 
	CFile file; 
	CString szFile(""),szText(""); 
	CString szPath(""); 
	 
	((CEdit *)GetDlgItem(IDC_EDIT_SRCFILE))->GetWindowText(szFile); 
	((CStatic *)GetDlgItem(IDC_LBL_SRCFILESIZE))->SetWindowText(""); 
	((CEdit *)GetDlgItem(IDC_EDIT_SPLITTOCOPIES))->SetWindowText(""); 
	((CStatic *)GetDlgItem(IDC_LBL_SPLITFILESIZE))->SetWindowText(""); 
	 
	if(file.Open(szFile, CFile::modeRead)) 
	{ 
		dwFileSize = file.GetLength(); 
		file.Close(); 
		szText.Format(_T("%d"), dwFileSize); 
		((CStatic *)GetDlgItem(IDC_LBL_SRCFILESIZE))->SetWindowText(szText); 
	} 
 
	szPath = szFile; 
	nPos = szPath.ReverseFind('\\'); 
 
	if(nPos != -1) 
	{ 
		szPath.Insert(nPos, '\0'); 
	} 
 
	((CEdit *)GetDlgItem(IDC_EDIT_SPLITFILEDIR))->SetWindowText(szPath); 
} 
 
void CSplitFileDlg::OnChangeEditSplittocopies()  
{ 
	DWORD dwFileSize; 
	int nSplitCopies,nSizePerCopy; 
	CString szText(""); 
 
	((CStatic *)GetDlgItem(IDC_LBL_SRCFILESIZE))->GetWindowText(szText); 
	((CStatic *)GetDlgItem(IDC_LBL_SPLITFILESIZE))->SetWindowText(""); 
 
	if(szText.IsEmpty()) 
	{ 
		return; 
	} 
 
	dwFileSize = ::atoi(szText); 
	((CEdit *)GetDlgItem(IDC_EDIT_SPLITTOCOPIES))->GetWindowText(szText); 
	nSplitCopies = ::atoi(szText); 
 
	if(nSplitCopies > 1) 
	{ 
		nSizePerCopy = dwFileSize / nSplitCopies; 
		szText.Format(_T("%d"), nSizePerCopy); 
		((CStatic *)GetDlgItem(IDC_LBL_SPLITFILESIZE))->SetWindowText(szText); 
	} 
} 
 
BOOL CSplitFileDlg::SelectDirectory(CString &szDir, CString szTitle) 
{ 
	char szPath[MAX_PATH]; 
	BROWSEINFO bi; 
	ITEMIDLIST *pidl; 
	BOOL bRet=TRUE; 
	 
	bi.hwndOwner = NULL; 
	bi.pidlRoot = NULL; 
	bi.pszDisplayName = szPath; 
	bi.lpszTitle = szTitle; 
	bi.ulFlags = BIF_RETURNONLYFSDIRS; 
	bi.lpfn = NULL; 
	bi.lParam = 0; 
	bi.iImage = 0; 
	 
	pidl = SHBrowseForFolder(&bi); 
	if(pidl == NULL) 
	{ 
		szPath[0] = 0; 
		bRet = FALSE; 
	} 
		 
	if(!SHGetPathFromIDList(pidl, szPath))   
	{ 
		szPath[0] = 0; 
		bRet = FALSE; 
	} 
 
	szDir.Format(_T("%s"), szPath); 
 
	return bRet; 
} 
 
void CSplitFileDlg::OnBtnSplitfiledir()  
{ 
	// TODO: Add your control notification handler code here 
	CString szDir(""); 
 
	if(SelectDirectory(szDir, "请选择文件分割后要保存的目录:")) 
	{ 
		((CEdit *)GetDlgItem(IDC_EDIT_SPLITFILEDIR))->SetWindowText(szDir); 
	} 
} 
 
int CSplitFileDlg::GetDirLevelCount(CString szDir) 
{ 
	CString szPath(""); 
	int nDirLevel = 0; 
	int nDirLen = 0; 
	int nPos = -1; 
 
	szPath.Format(_T("%s"), szDir); 
 
	if(szPath.IsEmpty()) 
	{ 
		return -1; 
	} 
 
	if(szPath.Mid(1, 1) != ":") 
	{//不是路径 
		return -1; 
	} 
 
	if(szPath.Right(1) == "\\") 
	{ 
		szPath = szPath.Left(szPath.GetLength() - 1); 
	} 
 
	nDirLen = szPath.GetLength(); 
 
	for(int i=0; i nLevelCount)) 
	{ 
		return FALSE; 
	} 
 
	if(nLevel == nLevelCount) 
	{ 
		szGetDir = szPath; 
	} 
	else 
	{ 
		for(i=0; i= 'a') && (chDrive <= 'z'))  
		|| ((chDrive >= 'A') && (chDrive <= 'Z'))) 
	{ 
		if(nDirLen == 2) 
		{ 
			szTemp = szPath.Mid(1, 1); 
			 
			if(szTemp == ":") 
			{ 
				return TRUE; 
			} 
		} 
		else 
		{ 
			szTemp = szPath.Mid(1, 2); 
			 
			if(szTemp == ":\\") 
			{ 
				return TRUE; 
			} 
		} 
	} 
 
	return FALSE; 
} 
 
void CSplitFileDlg::OnButton1()  
{ 
	// TODO: Add your control notification handler code here 
	TerminateThread(hThread,1); 
	m_stop.EnableWindow(FALSE); 
    m_btnSplitFile.EnableWindow(TRUE); 
	m_btnMergeFile.EnableWindow(TRUE); 
}