将文件根据不同日期进行分类(文件归档)

来源:互联网 发布:音频信号发生器软件 编辑:程序博客网 时间:2024/05/29 18:22


BOOL CPigeonholeFileDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();


// 将“关于...”菜单项添加到系统菜单中。


// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);


CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}


// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE);// 设置大图标
SetIcon(m_hIcon, FALSE);// 设置小图标


// TODO: 在此添加额外的初始化代码


m_progressCtrl.SetRange(0,100);
m_progressCtrl.SetBarColor(RGB(255,0,0));
m_progressCtrl.SetBkColor(RGB(0,255,0));
m_image.Load(_T("D:\\Test\\3.jpg"));


return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}


void CPigeonholeFileDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}


// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。


void CPigeonholeFileDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文


SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);


// 使图标在工作区矩形中居中
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;


// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
HDC destHdc = GetDC()->GetSafeHdc();
HDC srcHdc = m_image.GetDC();
RECT rt;
GetWindowRect(&rt);
// BitBlt(destHdc, 0,0, rt.right - rt.left, rt.bottom - rt.top, srcHdc, 0, 0, SRCCOPY);
DeleteDC(destHdc);
DeleteDC(srcHdc);
}
}


//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CPigeonholeFileDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}






void CPigeonholeFileDlg::OnBnClickedOpenpathButtton()
{
BROWSEINFO  bi;
bi.hwndOwner=NULL;
bi.pidlRoot=NULL;
bi.pszDisplayName=NULL;
bi.lpszTitle=NULL;
bi.ulFlags=0;
bi.lpfn =NULL;
bi.iImage =0;
LPCITEMIDLIST pidl=SHBrowseForFolder(&bi);
if(!pidl)
return;
TCHAR  szDisplayName[255];
SHGetPathFromIDList(pidl,szDisplayName);
CString str(szDisplayName);
m_openPath.SetWindowTextA(str);
m_openPathStr = str;
}




void CPigeonholeFileDlg::OnBnClickedSavepathButton()
{
// TODO: 在此添加控件通知处理程序代码
BROWSEINFO  bi;
bi.hwndOwner = NULL;
bi.pidlRoot = NULL;
bi.pszDisplayName = NULL;
bi.lpszTitle = NULL;
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.iImage = 0;
LPCITEMIDLIST pidl = SHBrowseForFolder(&bi);
if(!pidl)
return;
TCHAR  szDisplayName[255];
SHGetPathFromIDList(pidl, szDisplayName);
CString str(szDisplayName);
m_savePath.SetWindowTextA(str);
m_savePathStr = str;
}


void CPigeonholeFileDlg::GetAllFileName(CString path, CArray<CString> &fileArray)
{
CString fileName, fdPath, strTmp;
path += _T("\\*.*");
CFileFind find;
BOOL bf = find.FindFile(path);
while(bf)
{
bf = find.FindNextFile();
if(!find.IsDots())
{      
fdPath=find.GetFilePath();
if (find.IsDirectory())
{                //如果是文件夹,递归,继续往下找
GetAllFileName(fdPath, fileArray);
}
else
{                //如果是文件,判断是否是*.txt
strTmp=fdPath.Right(4);
strTmp.MakeLower();
fileArray.Add(fdPath);
}
}
}
find.Close();
}


BOOL CPigeonholeFileDlg::GetFileName(CString path, CString &fileName)
{
int pos = path.ReverseFind(_T('\\'));
if(pos > 0)
{
fileName = path.Right(path.GetLength() - pos - 1);
return TRUE;
}
return FALSE;
}


void CPigeonholeFileDlg::CopyToFolder(CString savePath)
{
CString folder;
CString path;
CString fileName;
float scale = 100 / (m_fileList.GetCount() + 1);
for(int i = 0; i < m_fileList.GetCount(); i++)
{
GetFileName(m_fileList.GetAt(i), fileName);
for(int j = 0; j < m_folderList.GetCount(); j++)
{
if(fileName.Find(m_folderList.GetAt(j)) != -1)
{
//创建文件夹
folder = savePath + _T("\\") + m_folderList.GetAt(j);
mkdir(folder.GetBuffer());
//复制到制定目录
path = folder +  _T("\\") + fileName;
CopyFile( m_fileList.GetAt(i), path, TRUE);
m_nFileCount++;
}
}
m_progressCtrl.SetPos(int(scale * (i + 1)));
}
m_progressCtrl.SetPos(100);
}




void CPigeonholeFileDlg::GetDate(Date &date, CString str)
{
int pos = str.Find('/');
date.Year = atoi(str.Left(pos).GetBuffer());
str = str.Right(str.GetLength() - pos - 1);
pos = str.Find('/');
date.Month = atoi(str.Left(pos).GetBuffer());
str = str.Right(str.GetLength() - pos - 1);
date.Day = atoi(str.GetBuffer());
}


void CPigeonholeFileDlg::NextDay(Date &date)
{
if(date.Month == 1 || date.Month == 3 || date.Month == 5 || date.Month == 7 || date.Month == 8 || date.Month == 10 || date.Month == 12)
{
if(date.Day == 31)
{
date.Day = 1;
++date.Month;
}
else
++date.Day;
}
else if(date.Month == 2)
{
if(date.Day == 28)
{
if((date.Year % 4 == 0 && date.Year % 100 != 0)||(date.Year % 400 == 0))
++date.Day;
else
{
date.Day = 1;
date.Month = 3;
}
}
else if(date.Day == 29)
{
date.Day = 1;
date.Month = 3;
}
else
++date.Day;
}
else
{
if(date.Day == 30)
{
date.Day = 1;
++date.Month;
}
else
++date.Day;
}
if(date.Month > 12)
{
date.Month = 1;
++date.Year;
}
}


void CPigeonholeFileDlg::GetFolderList(Date startDate, Date endDate)
{
CString str;
while(!(startDate.Year == endDate.Year && startDate.Month == endDate.Month && startDate.Day == endDate.Day))
{
str.Format(_T("%04d%02d%02d"), startDate.Year, startDate.Month, startDate.Day);
m_folderList.Add(str);
NextDay(startDate);
}
str.Format(_T("%04d%02d%02d"), startDate.Year, startDate.Month, startDate.Day);
m_folderList.Add(str);
}


void CPigeonholeFileDlg::OnBnClickedStartButton()
{
// TODO: 在此添加控件通知处理程序代码
m_nFileCount = 0;
Date startDate;
Date endDate;
CString startDatestr, endDateStr;
m_startDateCtrl.GetWindowText(startDatestr);
m_endDateCtrl.GetWindowText(endDateStr);
GetDate(startDate, startDatestr);
GetDate(endDate, endDateStr);
GetFolderList(startDate, endDate);
//获取指定目录下的所有文件
if(m_openPathStr.IsEmpty())
{
MessageBox(_T("文件目录为空"), _T("提示"));
return;
}
GetAllFileName(m_openPathStr, m_fileList);
//将获取的文件复制到制定目录下
if(m_savePathStr.IsEmpty())
{
MessageBox(_T("保存目录为空"), _T("提示"));
return;
}
CopyToFolder(m_savePathStr);
CString str;
str.Format(_T("完成%d个文件的整理"),m_nFileCount);
MessageBox(str, _T("提示"));
m_folderList.RemoveAll();
m_fileList.RemoveAll();
}
0 0