📄 seperatordlg.cpp
字号:
// SeperatorDlg.cpp : implementation file
//
#include "stdafx.h"
#include "FileSeperator.h"
#include "SeperatorDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSeperatorDlg dialog
CSeperatorDlg::CSeperatorDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSeperatorDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSeperatorDlg)
m_iNum = 2;
m_iSize = 1024;
//}}AFX_DATA_INIT
m_iSeperatorType = 0; //按照文件大小分割
m_file = NULL;
}
void CSeperatorDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSeperatorDlg)
DDX_Text(pDX, IDC_EDITNUM, m_iNum);
DDV_MinMaxUInt(pDX, m_iNum, 2, 1024);
DDX_Text(pDX, IDC_EDITSIZE, m_iSize);
DDV_MinMaxUInt(pDX, m_iSize, 1, 1024);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSeperatorDlg, CDialog)
//{{AFX_MSG_MAP(CSeperatorDlg)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_SEBYSIZE, OnSebysize)
ON_BN_CLICKED(IDC_SEBYNUM, OnSebynum)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSeperatorDlg message handlers
void CSeperatorDlg::OnButton1()
{
CFileDialog dlg(TRUE);
if(dlg.DoModal() == IDOK)
{
m_sFileName = dlg.GetPathName();
m_sExtenName = dlg.GetFileExt();
SetDlgItemText(IDC_FILE,m_sFileName);
if (m_file != NULL)
{
m_file->Close();
delete m_file;
m_file = NULL;
}
m_file = new CFile();
m_file->Open(m_sFileName,CFile::modeRead);
CString str;
str.Format("%d", m_file->GetLength());
SetDlgItemText(IDC_FILESIZE,str);
}
}
void CSeperatorDlg::OnCancel()
{
CDialog::OnCancel();
}
void CSeperatorDlg::OnSebysize()
{
m_iSeperatorType = 0;
}
void CSeperatorDlg::OnSebynum()
{
m_iSeperatorType = 1;
}
BOOL CSeperatorDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CButton* b = (CButton*)GetDlgItem(IDC_SEBYSIZE);
b->SetCheck(1);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/*
void CSeperatorDlg::OnOK()
{
UpdateData(TRUE);
if (m_sFileName.GetLength() == 0)
{
AfxMessageBox("请先选择一个文件");
return;
}
if (m_iSeperatorType == 1) //按照文件数目
{
int iSize = m_file->GetLength();
int iSmallSize = iSize/m_iNum;
if (iSmallSize > 1048576)
{
AfxMessageBox("单个文隔文件只支持1M,请加大文件数目");
return;
}
char sContent[1048576+1];
CString sFileName1 = m_sFileName;
sFileName1.TrimLeft("."+m_sExtenName);
CString sFileName2;
for(int i = 0; i < m_iNum-1; i++)
{
memset(sContent,0,1048576+1);
m_file->Read(sContent,iSmallSize);
sFileName2.Format("%s%d.%s", sFileName1,i,m_sExtenName);
CFile f;
f.Open(sFileName2,CFile::modeReadWrite|CFile::modeCreate);
f.Write(sContent,iSmallSize);
f.Close();
}
memset(sContent,0,1048576+1);
m_file->Read(sContent,iSize-iSmallSize*(m_iNum-1));
sFileName2.Format("%s%d.%s", sFileName1,i,m_sExtenName);
CFile f;
f.Open(sFileName2,CFile::modeReadWrite|CFile::modeCreate);
f.Write(sContent,iSize-iSmallSize*(m_iNum-1));
f.Close();
}
if (m_file != NULL)
{
m_file->Close();
delete m_file;
m_file = NULL;
}
CDialog::OnOK();
}
*/
void CSeperatorDlg::OnOK()
{
UpdateData(TRUE);
if (m_sFileName.GetLength() == 0)
{
AfxMessageBox("请先选择一个文件");
return;
}
int iSize = m_file->GetLength();
if (m_iSeperatorType == 0) //按照文件大小
{
m_iNum = iSize/m_iSize;
if (iSize%m_iSize > 0)
m_iNum++;
}
int iSmallSize = iSize/m_iNum;
if (iSmallSize > 1024)
{
AfxMessageBox("单个文隔文件只支持1K,请加大文件数目");
return;
}
char sContent[1024+1];
CString sFileName1 = m_sFileName;
sFileName1.TrimLeft("."+m_sExtenName);
CString sFileName2;
for(int i = 0; i < m_iNum-1; i++)
{
memset(sContent,0,1024+1);
m_file->Read(sContent,iSmallSize);
sFileName2.Format("%s%d.%s", sFileName1,i,m_sExtenName);
CFile f;
f.Open(sFileName2,CFile::modeReadWrite|CFile::modeCreate);
f.Write(sContent,iSmallSize);
f.Close();
}
memset(sContent,0,1024+1);
m_file->Read(sContent,iSize-iSmallSize*(m_iNum-1));
sFileName2.Format("%s%d.%s", sFileName1,i,m_sExtenName);
CFile f;
f.Open(sFileName2,CFile::modeReadWrite|CFile::modeCreate);
f.Write(sContent,iSize-iSmallSize*(m_iNum-1));
f.Close();
if (m_file != NULL)
{
m_file->Close();
delete m_file;
m_file = NULL;
}
AfxMessageBox("分割完成,请察看");
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -