简单文件管理系统设计_第1页
简单文件管理系统设计_第2页
简单文件管理系统设计_第3页
简单文件管理系统设计_第4页
简单文件管理系统设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.PAGE.目录一、题目和要求2二、相关原理分析和总的设计思想2三、数据结构和流程图4四、源程序6五、运行结果18六、自我评析与总结24一、题目和要求<1> 题目:简单文件管理系统的设计及实现<2> 要求:根据文件系统的相关原理,设计并用C或C++编程实现一个类似Windows系统中"我的电脑"功能的文件管理系统,该文件系统可以对系统中所有文件进行管理,同时具有创建新文件、删除文件、复制文件、创建文件夹等功能。二、相关原理分析和总的设计思想基于MFCAppWizard框架的程序定制一个菜单,有添加四个子菜单,创建,复制,删除,退出,在前三个子菜单中添加四个菜单项,文件夹,TXT,WORD,EXCEL。每个菜单项对应着一种功能。且复制选择路径都是基于对话框,操作方便,简洁明了。eq\o\ac<○,1>创建文件夹;要创建文件夹,首先要选择文件夹创建的位置,可以用到浏览文件夹的函数SHBrowseForFolder和两个结构BROWSEINFO和ITEMIDLIST,要想得到文件夹路径可以用SHGetPathFromIDList,当然程序要想拥有建立文件夹的功能,应该设置BROWSEINFO对象的ulFlags的参数有BIF_NEWDIALOGSTYLE;eq\o\ac<○,2>创建文件;不管是创建txt文件,word文件,excel文件原理都一样。可以写一个build函数,提供几个参数:标题title,路径filter,扩展名defExt。这样创建文件时,可以根据标题,路径,扩展名的不同调用build函数,达到不同功能的目的 在build函数体中使用CFileDialog定义一个对象来创建文件。eq\o\ac<○,3>复制文件夹;第一步:复制文件夹可以在一个对话框中完成,这样必然需要添加一个类CCopyDlg。第二步:在该对话框上设置两个按钮,一个按钮来选择源文件夹,保存源文件路径;一个按钮来选择目标文件夹,保存目标文件路径。选择路径的方法可以与步骤eq\o\ac<○,1>的方法相同。第三步:重写确定消息应用程序来实现从一个目录复制到另一个目录的功能〔copyFiles。下面是copyFiles函数的实现原理: 首先打开指定的文件夹进行搜索,再利用一个while循环,从当前目录搜索文件,判断搜索到的是不是"."和".."目录,如果是文件夹的话,进行递归;如果是文件,进行复制。eq\o\ac<○,4>复制文件;复制文件跟复制文件夹一样也需要创建一个对话框,添加一个类。同理也在对话框上添加两个按钮,分别接收源路径,和目标路径。不过接收的方法需要通过CFileDialog选择对话框,而不能再和eq\o\ac<○,1>一样啦。复制文件,vc中有已有的函数CopyFile。参数是两个复制的路径。eq\o\ac<○,5>删除文件夹 在删除文件夹之前,首先要删除文件夹下的所有文件,再删除文件夹。该功能的实现也是利用递归,先判断文件夹下是否有文件,若有,则删除,没有则删除文件夹,返回。eq\o\ac<○,6>删除文件定义一个类CMyFileDialog继承CFileDialog而来,重写OnInitDialog函数来设置对话框中按钮的文本。创建一个CMyFileDialog对象,在删除文件对话框中,选择想要删除的文件,调用DeleteFile函数进行文件的删除。eq\o\ac<○,7>退出程序 设置一个退出子菜单,发送一个WM_CLOSE消息,关闭程序退出。三、数据结构和流程图该程序没有使用到复杂的数据结构,是基于MFCAppWizard应用程序。主流程图:为使流程图简单些,将创建,复制,删除放一起,用"|"字符连接起来,代表"或"的意选择文件夹路径的流程图:四、源程序〔1定制一个菜单,添加5个子菜单,并分别设置它们的Popup,包括:创建<true>、复制<true>、删除<true>、帮助、退出<false>。 在子菜单中添加它们的菜单项。如下所示:创建:文件夹,TXT,WORD,EXCEL复制:文件夹,TXT,WORD,EXCEL删除:文件夹,TXT,WORD,EXCEL帮助:关于DMS<&A>...退出〔2创建文件夹voidCMainFrame::OnBuildFolder<>{ //选择新建文件夹的路径 UpdateData<TRUE>;charszDir[MAX_PATH]; BROWSEINFObi; ITEMIDLIST*pidl; bi.hwndOwner=this->m_hWnd; bi.pidlRoot=NULL; bi.pszDisplayName=LPWSTR<szDir>; bi.lpszTitle=TEXT<"新建文件夹">; bi.ulFlags=BIF_EDITBOX|BIF_VALIDATE|BIF_NEWDIALOGSTYLE; bi.lpfn=NULL; bi.lParam=0; bi.iImage=0; pidl=SHBrowseForFolder<&bi>; if<pidl==NULL> return; if<!SHGetPathFromIDList<LPCITEMIDLIST<pidl>,LPWSTR<szDir>>> return; else m_strPath=szDir; UpdateData<FALSE>;}〔3创建文件的函数voidCMainFrame::build<CStringtitle,CStringfilter,CStringdefExt>{ CFileDialogfileDlg<FALSE>; fileDlg.m_ofn.lpstrTitle=title; fileDlg.m_ofn.lpstrFilter=filter; fileDlg.m_ofn.lpstrDefExt=defExt; if<IDOK==fileDlg.DoModal<>> {//创建一个文档 CFilefile<fileDlg.GetFileName<>,CFile::modeCreate>; file.Close<>; }}创建txt文件:voidCMainFrame::OnBuildTxt<>{ //创建一个Txt文档 build<TEXT<"新建Txt文档">,TEXT<"TextFiles<*.txt>\0*.txt\0">, TEXT<"txt">>;}创建word文档:voidCMainFrame::OnBuildWord<>{ //创建一个Word文档 build<TEXT<"新建Word文档">, TEXT<"TextFiles<*.doc>\0*.doc\0">,TEXT<"doc">>;}创建excel工作表:voidCMainFrame::OnBuildExcel<>{ //创建一个Excel工作表 build<TEXT<"新建Excel工作表">,TEXT<"TextFiles<*.xls>\0*.xls\0">,TEXT<"xls">>;}创建txt、word、excel都是调用build函数。〔4复制文件夹添加一个类:CCopyDlg;在对话框上添加两个按钮,"选择源文件夹","选择目标文件夹";选择路径的函数:CStringCCopyDlg::selectPath<CStringpath>{ //选择路径 UpdateData<TRUE>;charszDir[MAX_PATH]; CStringstr; BROWSEINFObi; ITEMIDLIST*pidl; bi.hwndOwner=this->m_hWnd; bi.pidlRoot=NULL; bi.pszDisplayName=LPTSTR<szDir>; bi.lpszTitle=path; bi.ulFlags=BIF_EDITBOX|BIF_VALIDATE; bi.lpfn=NULL; bi.lParam=0; bi.iImage=0; pidl=SHBrowseForFolder<&bi>; if<pidl==NULL> returnCString<>; if<!SHGetPathFromIDList<pidl,LPTSTR<szDir>>> returnCString<>; else str=szDir; UpdateData<FALSE>; returnstr;}分别对这两个按钮进行响应:voidCCopyDlg::OnBnClickedButton1<>{ //获得源文件夹的路径 m_strBgnPath=selectPath<TEXT<"选择源文件夹">>;}voidCCopyDlg::OnBnClickedButton2<>{ //获得目标文件夹的路径 m_strEndPath=selectPath<TEXT<"选择目标文件夹">>;}再添加一个复制函数:BOOLcopyFiles<CStringstrSrcPath,CStringstrDstPath>{//创建目标文件夹CreateDirectory<strDstPath,NULL>;CFileFindfinder;//打开指定的文件夹进行搜索BOOLbWorking=finder.FindFile<strSrcPath+TEXT<"\\*.*">>;while<bWorking>{//从当前目录搜索文件bWorking=finder.FindNextFile<>;CStringstrFileName=finder.GetFileName<>;CStringstrSrc=strSrcPath+TEXT<"\\">+strFileName;CStringstrDst=strDstPath+TEXT<"\\">+strFileName;//判断搜索到的是不是"."和".."目录if<!finder.IsDots<>>{//判断搜索到的目录是否是文件夹if<finder.IsDirectory<>>{//如果是文件夹的话,进行递归if<!copyFiles<strSrc,strDst>>returnfalse;}else{//如果是文件,进行复制if<!CopyFile<strSrc,strDst,FALSE>>returnfalse;}}}returntrue;}对确定按钮的消息响应函数重写:voidCCopyDlg::OnBnClickedOk<>{ copyFiles<m_strBgnPath,m_strEndPath>; OnOK<>;}最后对菜单项:复制文件夹的响应:voidCMainFrame::OnCopyFolder<>{ //弹出一个复制文件夹的对话框 CCopyDlgdlg; dlg.DoModal<>;}〔5复制txt文件添加一个类:CTxtDlg;先对两个按钮,"选择源Txt文件""选择目的Txt文件"进行响应:voidCTxtDlg::OnBnClickedButton1<>{ CFileDialogdlg<1,NULL,NULL,NULL,TEXT<"Textfiles<*.txt>|*.txt">>; dlg.m_ofn.lpstrTitle=TEXT<"选择源Txt文件">; if<dlg.DoModal<>==IDOK> { m_strBgnPath=dlg.GetPathName<>; }}voidCTxtDlg::OnBnClickedButton2<>{ CFileDialogfileDlg<FALSE>; fileDlg.m_ofn.lpstrTitle=TEXT<"选择目的Txt文件">;strFilter=TEXT<"TextFiles<*.txt>\0*.txt\0">; fileDlg.m_ofn.lpstrDefExt=TEXT<"txt">; if<IDOK==fileDlg.DoModal<>> { m_strEndPath=fileDlg.GetFileName<>; }}再对"确定"按钮进行响应:voidCTxtDlg::OnBnClickedOk<>{ BOOLtempFile=CopyFile<m_strBgnPath,m_strEndPath,FALSE>; intitemp=GetLastError<>; if<!tempFile> { MessageBox<TEXT<"文件复制失败">>; } else { MessageBox<TEXT<"文件复制成功">>; } OnOK<>;}最后对菜单项:复制txt文件的响应:voidCMainFrame::OnCopyTxt<>{//弹出一个复制Txt文件的对话框 CTxtDlgdlg; dlg.DoModal<>;}〔6复制word文档添加一个类:CWordDlg;对两个按钮,"选择源Word文档""选择目的Word文档"进行响应:voidCWordDlg::OnBnClickedButton1<>{CFileDialogdlg<1,NULL,NULL,NULL,TEXT<"Textfiles<*.doc>|*.doc">>; dlg.m_ofn.lpstrTitle=TEXT<"选择源Word文档">; if<dlg.DoModal<>==IDOK> { m_strBgnPath=dlg.GetPathName<>; }}voidCWordDlg::OnBnClickedButton2<>{CFileDialogfileDlg<FALSE>; fileDlg.m_ofn.lpstrTitle=TEXT<"选择目的Word文档">; fileDlg.m_ofn.lpstrFilter=TEXT<"TextFiles<*.doc>\0*.doc\0">; fileDlg.m_ofn.lpstrDefExt=TEXT<"doc">; if<IDOK==fileDlg.DoModal<>> { m_strEndPath=fileDlg.GetFileName<>; }}再对"确定"按钮进行响应:voidCWordDlg::OnBnClickedOk<>{BOOLtempFile=CopyFile<m_strBgnPath,m_strEndPath,FALSE>; intitemp=GetLastError<>; if<!tempFile> { MessageBox<TEXT<"文件复制失败">>; } else { MessageBox<TEXT<"文件复制成功">>; } OnOK<>;}最后对菜单项:复制word文档的响应:voidCMainFrame::OnCopyWord<>{ //弹出一个复制Word文件的对话框 CWordDlgdlg; dlg.DoModal<>;}〔7复制excel工作表添加一个类:CExcelDlg;对两个按钮进行响应:voidCExcelDlg::OnBnClickedButton3<>{ CFileDialogdlg<1,NULL,NULL,NULL,TEXT<"Textfiles<*.xls>|*.xls">>; dlg.m_ofn.lpstrTitle=TEXT<"选择源Excel工作表">; if<dlg.DoModal<>==IDOK> { m_strBgnPath=dlg.GetPathName<>; }}voidCExcelDlg::OnBnClickedButton2<>{ CFileDialogfileDlg<FALSE>; fileDlg.m_ofn.lpstrTitle=TEXT<"选择目的Excel工作表>">; fileDlg.m_ofn.lpstrFilter=TEXT<"TextFiles<*.xls>\0*.xls\0">; fileDlg.m_ofn.lpstrDefExt=TEXT<"xls">; if<IDOK==fileDlg.DoModal<>> { m_strEndPath=fileDlg.GetFileName<>; }}再对确定按钮进行响应:voidCExcelDlg::OnBnClickedOk<>{ BOOLtempFile=CopyFile<m_strBgnPath,m_strEndPath,FALSE>; intitemp=GetLastError<>; if<!tempFile> { MessageBox<TEXT<"文件复制失败">>; } else { MessageBox<TEXT<"文件复制成功">>; } OnOK<>;}最后对菜单项:复制excel工作表的响应:voidCMainFrame::OnCopyExcel<>{ //弹出一个复制Excel文件的对话框 CExcelDlgdlg; dlg.DoModal<>;}〔8删除文件夹的消息处理程序//删除非空目录function如下:BOOLDeleteDirectory<char*DirName>{CFileFindtempFind;chartempFileFind[200];sprintf_s<tempFileFind,"%s\\*.*",DirName>;BOOLIsFinded=<BOOL>tempFind.FindFile<LPCTSTR<tempFileFind>>;while<IsFinded>{IsFinded=<BOOL>tempFind.FindNextFile<>;if<!tempFind.IsDots<>>{charfoundFileName[200];strcpy_s<foundFileName,<char*>tempFind.GetFileName<>.GetBuffer<200>>;if<tempFind.IsDirectory<>>{chartempDir[200];sprintf_s<tempDir,"%s\\%s",DirName,foundFileName>;DeleteDirectory<tempDir>;}else{chartempFileName[200];sprintf_s<tempFileName,"%s\\%s",DirName,foundFileName>;DeleteFileA<tempFileName>;}}}tempFind.Close<>;if<!RemoveDirectoryA<DirName>>{MessageBoxA<0,"删除目录失败!","警告信息",MB_OK>;returnFALSE;}returnTRUE;}//删除文件夹voidCMainFrame::OnDeleteFolder<>{ //选择要删除文件夹的路径 UpdateData<TRUE>;charszDir[MAX_PATH]; BROWSEINFObi; ITEMIDLIST*pidl; bi.hwndOwner=this->m_hWnd; bi.pidlRoot=NULL; bi.pszDisplayName=LPWSTR<szDir>; bi.lpszTitle=TEXT<"删除文件夹">; bi.ulFlags=BIF_EDITBOX|BIF_VALIDATE; bi.lpfn=NULL; bi.lParam=0; bi.iImage=0; pidl=SHBrowseForFolder<&bi>; if<pidl==NULL> return; if<!SHGetPathFromIDList<pidl,LPWSTR<szDir>>> return; else strcpy_s<path,szDir>; UpdateData<FALSE>; DeleteDirectory<path>; MessageBox<TEXT<"删除文件夹成功">>;}〔9增加一个CMyFileDialog类它是继承CFileDialog类而来,重写它的OnInitDialog函数:BOOLCMyFileDialog::OnInitDialog<void>{ //设置对话框上按钮的文本 SetControlText<IDOK,"删除">; return0;}〔10删除txt文件的消息处理程序voidCMainFrame::OnDeleteTxt<>{ CMyFileDialogdlg<1,NULL,NULL,NULL,TEXT<"Textfiles<*.txt>|*.txt">>; dlg.m_ofn.lpstrTitle=TEXT<"选择要删除的Txt文件">; if<dlg.DoModal<>==IDOK> { m_strTxtPath=dlg.GetPathName<>; } DeleteFile<m_strTxtPath>;}〔11删除word文档的消息处理程序voidCMainFrame::OnDeleteWord<>{ CMyFileDialogdlg<1,NULL,NULL,NULL,TEXT<"Textfiles<*.doc>|*.doc">>; dlg.m_ofn.lpstrTitle=TEXT<"选择要删除的Word文档">; if<dlg.DoModal<>==IDOK> { m_strTxtPath=dlg.GetPathName<>; } DeleteFile<m_strTxtPath>;}〔12删除excel工作表的消息处理程序voidCMainFrame::OnDeleteExcel<>{ CMyFileDialogdlg<1,NULL,NULL,NULL,TEXT<"Textfiles<*.xls>|*.xls">>; dlg.m_ofn.lpstrTitle=TEXT<"选择要删除的Excel工作表">; if<dlg.DoModal<>==IDOK> { m_strTxtPath=dlg.GetPathName<>; } DeleteFile<m_strTxtPath>;}<13>退出的消息处理程序voidCMainFrame::OnExit<>{ //发送一个退出程序的消息 SendMessage<WM_CLOSE>;}<14>修改窗口的标题在PreCreateWindow函数体中添加如下代码://CREATESTRUCTcs来修改窗口类或样式 cs.style&=~FWS_ADDTOTITLE; cs.lpszName=TEXT<"简单文件管理系统">;〔15隐藏工具栏将以前的工具栏隐藏,在OnCreate函数体中添加如下代码: m_wndToolBar.ShowWindow<SW_HIDE>;五、运行结果程序的主界面:窗口的标题"简单文件管理系统"它有三个弹出式子菜单:"创建""复制

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论