⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seperatordlg.cpp

📁 日历算法日历算法日历算法日历算法日历算法日历算法日历算法日历算法日历算法日历算法日历算法日历算法
💻 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 + -