您的位置:首页 > 其它

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

2017-04-18 20:17 826 查看
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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐