版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录一、题目和要求2二、相关原理分析和总的设计思想2三、数据结构和流程图4四、源程序6五、运行结果18六、自我评析与总结24一、题目和要求(1) 题目:简单文件管理系统的设计及实现(2) 要求:根据文件系统的相关原理,设计并用C或C+编程实现一个类似Windows系统中“我的电脑”功能的文件管理系统,该文件系统可以对系统中所有文件进行管理,同时具有创建新文件、删除文件、复制文件、创建文件夹等功能。二、相关原理分析和总的设计思想基于MFC AppWizard框架的程序定制一个菜单,有添加四个子菜单,创建,复制,删除,退出,在前三个子菜单中添加四个菜单项,文件夹,TXT,WORD,EXCEL。每个
2、菜单项对应着一种功能。且复制选择路径都是基于对话框,操作方便,简洁明了。创建文件夹;要创建文件夹,首先要选择文件夹创建的位置,可以用到浏览文件夹的函数SHBrowseForFolder和两个结构BROWSEINFO和ITEMIDLIST,要想得到文件夹路径可以用SHGetPathFromIDList,当然程序要想拥有建立文件夹的功能,应该设置BROWSEINFO对象的ulFlags的参数有 BIF_NEWDIALOGSTYLE ;创建文件;不管是创建txt文件,word文件,excel文件原理都一样。可以写一个build函数,提供几个参数:标题title, 路径filter,扩展名defExt
3、。这样创建文件时,可以根据标题,路径,扩展名的不同调用build函数,达到不同功能的目的在build函数体中使用CFileDialog定义一个对象来创建文件。复制文件夹;第一步:复制文件夹可以在一个对话框中完成,这样必然需要添加一个类CCopyDlg。第二步:在该对话框上设置两个按钮,一个按钮来选择源文件夹,保存源文件路径;一个按钮来选择目标文件夹,保存目标文件路径。选择路径的方法可以与步骤的方法相同。第三步:重写确定消息应用程序来实现从一个目录复制到另一个目录的功能(copyFiles)。下面是copyFiles函数的实现原理:首先打开指定的文件夹进行搜索,再利用一个while循环,从当前目
4、录搜索文件,判断搜索到的是不是.和.目录,如果是文件夹的话,进行递归;如果是文件,进行复制。复制文件;复制文件跟复制文件夹一样也需要创建一个对话框,添加一个类。同理也在对话框上添加两个按钮,分别接收源路径,和目标路径。不过接收的方法需要通过CFileDialog选择对话框,而不能再和一样啦。复制文件,vc中有已有的函数CopyFile。参数是两个复制的路径。删除文件夹在删除文件夹之前,首先要删除文件夹下的所有文件,再删除文件夹。该功能的实现也是利用递归,先判断文件夹下是否有文件,若有,则删除,没有则删除文件夹,返回。删除文件定义一个类CMyFileDialog继承CFileDialog而来,重
5、写OnInitDialog函数来设置对话框中按钮的文本。创建一个CMyFileDialog对象,在删除文件对话框中,选择想要删除的文件,调用DeleteFile函数进行文件的删除。退出程序设置一个退出子菜单,发送一个WM_CLOSE消息,关闭程序退出。三、数据结构和流程图该程序没有使用到复杂的数据结构,是基于MFC AppWizard应用程序。主流程图:为使流程图简单些,将创建,复制,删除放一起,用“”字符连接起来,代表“或”的意选择文件夹路径的流程图:四、源程序(1)定制一个菜单,添加5个子菜单,并分别设置它们的Popup,包括:创建(true)、复制(true)、删除(true)、帮助、退
6、出(false)。在子菜单中添加它们的菜单项。如下所示:创建:文件夹,TXT,WORD,EXCEL复制:文件夹,TXT,WORD,EXCEL删除:文件夹,TXT,WORD,EXCEL帮助:关于 DMS(&A).退出(2)创建文件夹void CMainFrame:OnBuildFolder()/选择新建文件夹的路径UpdateData(TRUE); char szDirMAX_PATH;BROWSEINFO bi;ITEMIDLIST *pidl;bi.hwndOwner = this-m_hWnd;bi.pidlRoot = NULL;bi.pszDisplayName = LPWSTR(sz
7、Dir);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;elsem_strPath = szDir;UpdateData(FALSE);(3)创
8、建文件的函数void CMainFrame:build(CString title, CString filter, CString defExt)CFileDialog fileDlg(FALSE);fileDlg.m_ofn.lpstrTitle=title;fileDlg.m_ofn.lpstrFilter=filter;fileDlg.m_ofn.lpstrDefExt=defExt;if(IDOK=fileDlg.DoModal()/创建一个文档CFile file(fileDlg.GetFileName(),CFile:modeCreate);file.Close();创建txt文
9、件:void CMainFrame:OnBuildTxt()/创建一个Txt文档build(TEXT(新建Txt文档),TEXT(TextFiles(*.txt)0*.txt0),TEXT(txt);创建word文档:void CMainFrame:OnBuildWord()/创建一个Word文档build(TEXT(新建Word文档),TEXT(Text Files(*.doc)0*.doc0),TEXT(doc);创建excel工作表:void CMainFrame:OnBuildExcel()/创建一个Excel工作表build(TEXT(新建Excel工作表),TEXT(Text Fi
10、les(*.xls)0*.xls0),TEXT(xls);创建txt、word、excel都是调用build函数。(4)复制文件夹添加一个类:CCopyDlg;在对话框上添加两个按钮,“选择源文件夹”,“选择目标文件夹”;选择路径的函数:CString CCopyDlg:selectPath(CString path)/选择路径UpdateData(TRUE); char szDirMAX_PATH;CString str;BROWSEINFO bi;ITEMIDLIST *pidl;bi.hwndOwner = this-m_hWnd;bi.pidlRoot = NULL;bi.pszDis
11、playName = 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) return CString();if(!SHGetPathFromIDList(pidl, LPTSTR (szDir) return CString();else str = szDir;UpdateData(FALSE);return str;
12、分别对这两个按钮进行响应:void CCopyDlg:OnBnClickedButton1()/获得源文件夹的路径m_strBgnPath=selectPath(TEXT(选择源文件夹);void CCopyDlg:OnBnClickedButton2()/获得目标文件夹的路径m_strEndPath=selectPath(TEXT(选择目标文件夹);再添加一个复制函数:BOOL copyFiles(CString strSrcPath, CString strDstPath) / 创建目标文件夹 CreateDirectory(strDstPath,NULL); CFileFind find
13、er; / 打开指定的文件夹进行搜索 BOOL bWorking = finder.FindFile(strSrcPath + TEXT(*.*); while(bWorking) / 从当前目录搜索文件 bWorking = finder.FindNextFile(); CString strFileName = finder.GetFileName(); CString strSrc = strSrcPath + TEXT() + strFileName; CString strDst = strDstPath + TEXT() + strFileName; / 判断搜索到的是不是.和.目
14、录 if(!finder.IsDots() / 判断搜索到的目录是否是文件夹 if(finder.IsDirectory() / 如果是文件夹的话,进行递归 if(!copyFiles(strSrc, strDst) return false; else / 如果是文件,进行复制 if(!CopyFile(strSrc, strDst, FALSE) return false; return true;对确定按钮的消息响应函数重写:void CCopyDlg:OnBnClickedOk()copyFiles(m_strBgnPath,m_strEndPath);OnOK();最后对菜单项:复制
15、文件夹的响应:void CMainFrame:OnCopyFolder()/弹出一个复制文件夹的对话框CCopyDlg dlg;dlg.DoModal();(5)复制txt文件添加一个类:CTxtDlg;先对两个按钮,选择源Txt文件选择目的Txt文件进行响应:void CTxtDlg:OnBnClickedButton1()CFileDialog dlg(1,NULL,NULL,NULL,TEXT(Text files(*.txt)|*.txt);dlg.m_ofn.lpstrTitle=TEXT(选择源Txt文件);if(dlg.DoModal()=IDOK)m_strBgnPath =
16、dlg.GetPathName();void CTxtDlg:OnBnClickedButton2()CFileDialog fileDlg(FALSE);fileDlg.m_ofn.lpstrTitle=TEXT(选择目的Txt文件);fileDlg.m_ofn.lpstrFilter=TEXT(Text Files(*.txt)0*.txt0);fileDlg.m_ofn.lpstrDefExt=TEXT(txt);if(IDOK=fileDlg.DoModal()m_strEndPath=fileDlg.GetFileName();再对“确定”按钮进行响应:void CTxtDlg:On
17、BnClickedOk()BOOL tempFile = CopyFile(m_strBgnPath,m_strEndPath,FALSE); int itemp = GetLastError(); if(!tempFile)MessageBox( TEXT(文件复制失败) );elseMessageBox( TEXT(文件复制成功) );OnOK();最后对菜单项:复制txt文件的响应:void CMainFrame:OnCopyTxt()/弹出一个复制Txt文件的对话框CTxtDlg dlg;dlg.DoModal();(6)复制word文档添加一个类:CWordDlg;对两个按钮,选择源
18、Word文档选择目的Word文档进行响应:void CWordDlg:OnBnClickedButton1()CFileDialog dlg(1,NULL,NULL,NULL,TEXT(Text files(*.doc)|*.doc);dlg.m_ofn.lpstrTitle=TEXT(选择源Word文档);if(dlg.DoModal()=IDOK) m_strBgnPath = dlg.GetPathName();void CWordDlg:OnBnClickedButton2()CFileDialog fileDlg(FALSE);fileDlg.m_ofn.lpstrTitle=TEX
19、T(选择目的Word文档);fileDlg.m_ofn.lpstrFilter=TEXT(Text Files(*.doc)0*.doc0);fileDlg.m_ofn.lpstrDefExt=TEXT(doc);if(IDOK=fileDlg.DoModal()m_strEndPath=fileDlg.GetFileName();再对“确定”按钮进行响应:void CWordDlg:OnBnClickedOk()BOOL tempFile = CopyFile(m_strBgnPath,m_strEndPath,FALSE); int itemp = GetLastError(); if(!
20、tempFile)MessageBox( TEXT(文件复制失败) );elseMessageBox( TEXT(文件复制成功) ); OnOK();最后对菜单项:复制word文档的响应:void CMainFrame:OnCopyWord()/弹出一个复制Word文件的对话框CWordDlg dlg;dlg.DoModal();(7)复制excel工作表添加一个类:CExcelDlg;对两个按钮进行响应:void CExcelDlg:OnBnClickedButton3()CFileDialog dlg(1,NULL,NULL,NULL,TEXT(Text files(*.xls)|*.xl
21、s);dlg.m_ofn.lpstrTitle=TEXT(选择源Excel工作表);if(dlg.DoModal()=IDOK) m_strBgnPath = dlg.GetPathName();void CExcelDlg:OnBnClickedButton2()CFileDialog fileDlg(FALSE);fileDlg.m_ofn.lpstrTitle=TEXT(选择目的Excel工作表);fileDlg.m_ofn.lpstrFilter=TEXT(Text Files(*.xls)0*.xls0);fileDlg.m_ofn.lpstrDefExt=TEXT(xls);if(
22、IDOK=fileDlg.DoModal()m_strEndPath=fileDlg.GetFileName();再对确定按钮进行响应:void CExcelDlg:OnBnClickedOk()BOOL tempFile = CopyFile(m_strBgnPath,m_strEndPath,FALSE); int itemp = GetLastError(); if(!tempFile)MessageBox( TEXT(文件复制失败) );elseMessageBox( TEXT(文件复制成功) ); OnOK();最后对菜单项:复制excel工作表的响应:void CMainFrame
23、:OnCopyExcel()/弹出一个复制Excel文件的对话框CExcelDlg dlg;dlg.DoModal();(8)删除文件夹的消息处理程序/删除非空目录function如下:BOOL DeleteDirectory(char *DirName) CFileFind tempFind; char tempFileFind200; sprintf_s(tempFileFind,%s*.*,DirName); BOOL IsFinded=(BOOL)tempFind.FindFile(LPCTSTR(tempFileFind); while(IsFinded) IsFinded=(BOO
24、L)tempFind.FindNextFile(); if(!tempFind.IsDots() char foundFileName200; strcpy_s(foundFileName,(char*)tempFind.GetFileName().GetBuffer(200); if(tempFind.IsDirectory() char tempDir200; sprintf_s(tempDir,%s%s,DirName,foundFileName); DeleteDirectory(tempDir); else char tempFileName200; sprintf_s(tempFi
25、leName,%s%s,DirName,foundFileName); DeleteFileA(tempFileName); tempFind.Close(); if(!RemoveDirectoryA(DirName) MessageBoxA(0,删除目录失败!,警告信息,MB_OK); return FALSE; return TRUE;/删除文件夹void CMainFrame:OnDeleteFolder()/选择要删除文件夹的路径UpdateData(TRUE); char szDirMAX_PATH;BROWSEINFO bi;ITEMIDLIST *pidl;bi.hwndOwn
26、er = 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(pa
27、th , szDir);UpdateData(FALSE);DeleteDirectory(path);MessageBox(TEXT(删除文件夹成功);(9)增加一个CMyFileDialog类它是继承CFileDialog类而来,重写它的OnInitDialog函数:BOOL CMyFileDialog:OnInitDialog(void)/设置对话框上按钮的文本SetControlText(IDOK,删除); return 0;(10)删除txt文件的消息处理程序void CMainFrame:OnDeleteTxt()CMyFileDialog dlg(1,NULL,NULL,NULL
28、,TEXT(Text files(*.txt)|*.txt);dlg.m_ofn.lpstrTitle=TEXT(选择要删除的Txt文件);if(dlg.DoModal()=IDOK)m_strTxtPath = dlg.GetPathName();DeleteFile(m_strTxtPath);(11)删除word文档的消息处理程序void CMainFrame:OnDeleteWord()CMyFileDialog dlg(1,NULL,NULL,NULL,TEXT(Text files(*.doc)|*.doc);dlg.m_ofn.lpstrTitle=TEXT(选择要删除的Word
29、文档);if(dlg.DoModal()=IDOK)m_strTxtPath = dlg.GetPathName();DeleteFile(m_strTxtPath);(12)删除excel工作表的消息处理程序void CMainFrame:OnDeleteExcel()CMyFileDialog dlg(1,NULL,NULL,NULL,TEXT(Text files(*.xls)|*.xls);dlg.m_ofn.lpstrTitle=TEXT(选择要删除的Excel工作表);if(dlg.DoModal()=IDOK)m_strTxtPath = dlg.GetPathName();De
30、leteFile(m_strTxtPath);(13)退出的消息处理程序void CMainFrame:OnExit()/发送一个退出程序的消息SendMessage(WM_CLOSE);(14)修改窗口的标题在PreCreateWindow函数体中添加如下代码:/ CREATESTRUCT cs 来修改窗口类或样式cs.style &=FWS_ADDTOTITLE;cs.lpszName=TEXT(简单文件管理系统);(15)隐藏工具栏将以前的工具栏隐藏,在OnCreate函数体中添加如下代码:m_wndToolBar.ShowWindow(SW_HIDE);五、运行结果程序的主界面:窗口的标题“简单文件管理系统”它有三个弹出式子菜单:“创建”“复制”“删除”,它们都有四个菜单项:文件夹,TXT,WORD,EXCEL。最后一个子菜单:“退出” ,是一个非弹出式的子菜单,有退出程序的消息响应函数。方便用户人性化退出。单击:退出。便可退出程序(1)创建文件夹 单击“创建”-“文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025大型超市商品购销合同范本
- 2025租车(出租)合同书
- 数字资产化-洞察分析
- 字典树及应用 课程设计
- 铁路工程地质勘探-洞察分析
- 暑假辅导课程设计
- 2024年度消防工程设计审核与施工监理合同3篇
- 游戏机创意课程设计
- 托班综合能力课程设计
- 2024年新型屋顶瓦工施工劳务合同3篇
- 办公室行政培训
- 【《伊利乳业盈利能力分析与评价案例》10000字】
- 湖南省岳阳市2023-2024学年高一上学期1月期末质量监测试题+物理 含答案
- 圆柱的表面积课件
- 2024年秋季学期新人教版3年级上册英语课件 Unit 5 Part A 第1课时 Let's talk Guess and check
- 2024年高等教育法学类自考-00226知识产权法考试近5年真题附答案
- 2024年宁夏中考语文试卷(含答案逐题解析)+2023年中考语文试卷及答案
- 金匮要略2022-2023-2学期学习通超星期末考试答案章节答案2024年
- DB31-T 1502-2024 工贸行业有限空间作业安全管理规范
- 《思想政治理论实践》教学大纲
- 苏轼向南(2023年四川广元中考语文试卷散文阅读题及答案)
评论
0/150
提交评论