简单文件管理系统.docx

上传人:b****6 文档编号:13102737 上传时间:2023-06-11 格式:DOCX 页数:28 大小:269.94KB
下载 相关 举报
简单文件管理系统.docx_第1页
第1页 / 共28页
简单文件管理系统.docx_第2页
第2页 / 共28页
简单文件管理系统.docx_第3页
第3页 / 共28页
简单文件管理系统.docx_第4页
第4页 / 共28页
简单文件管理系统.docx_第5页
第5页 / 共28页
简单文件管理系统.docx_第6页
第6页 / 共28页
简单文件管理系统.docx_第7页
第7页 / 共28页
简单文件管理系统.docx_第8页
第8页 / 共28页
简单文件管理系统.docx_第9页
第9页 / 共28页
简单文件管理系统.docx_第10页
第10页 / 共28页
简单文件管理系统.docx_第11页
第11页 / 共28页
简单文件管理系统.docx_第12页
第12页 / 共28页
简单文件管理系统.docx_第13页
第13页 / 共28页
简单文件管理系统.docx_第14页
第14页 / 共28页
简单文件管理系统.docx_第15页
第15页 / 共28页
简单文件管理系统.docx_第16页
第16页 / 共28页
简单文件管理系统.docx_第17页
第17页 / 共28页
简单文件管理系统.docx_第18页
第18页 / 共28页
简单文件管理系统.docx_第19页
第19页 / 共28页
简单文件管理系统.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

简单文件管理系统.docx

《简单文件管理系统.docx》由会员分享,可在线阅读,更多相关《简单文件管理系统.docx(28页珍藏版)》请在冰点文库上搜索。

简单文件管理系统.docx

简单文件管理系统

 

一、题目和要求

(1)题目:

简单文件管理系统的设计及实现

(2)要求:

根据文件系统的相关原理,设计并用C或C++编程实现一个类似Windows系统中“我的电脑”功能的文件管理系统,该文件系统可以对系统中所有文件进行管理,同时具有创建新文件、删除文件、复制文件、创建文件夹等功能。

二、相关原理分析和总的设计思想

基于MFCAppWizard框架的程序

定制一个菜单,有添加四个子菜单,创建,复制,删除,退出,在前三个子菜单中添加四个菜单项,文件夹,TXT,WORD,EXCEL。

每个菜单项对应着一种功能。

且复制选择路径都是基于对话框,操作方便,简洁明了。

创建文件夹;

要创建文件夹,首先要选择文件夹创建的位置,可以用到浏览文件夹的函数SHBrowseForFolder和两个结构BROWSEINFO和ITEMIDLIST,要想得到文件夹路径可以用SHGetPathFromIDList,当然程序要想拥有建立文件夹的功能,应该设置BROWSEINFO对象的ulFlags的参数有BIF_NEWDIALOGSTYLE;

创建文件;

不管是创建txt文件,word文件,excel文件原理都一样。

可以写一个build函数,提供几个参数:

标题title,路径filter,扩展名defExt。

这样创建文件时,可以根据标题,路径,扩展名的不同调用build函数,达到不同功能的目的

在build函数体中使用CFileDialog定义一个对象来创建文件。

复制文件夹;

第一步:

复制文件夹可以在一个对话框中完成,这样必然需要添加一个类CCopyDlg。

第二步:

在该对话框上设置两个按钮,一个按钮来选择源文件夹,保存源文件路径;一个按钮来选择目标文件夹,保存目标文件路径。

选择路径的方法可以与步骤

的方法相同。

第三步:

重写确定消息应用程序来实现从一个目录复制到另一个目录的功能(copyFiles)。

下面是copyFiles函数的实现原理:

首先打开指定的文件夹进行搜索,再利用一个while循环,从当前目录搜索文件,判断搜索到的是不是"."和".."目录,如果是文件夹的话,进行递归;如果是文件,进行复制。

复制文件;

复制文件跟复制文件夹一样也需要创建一个对话框,添加一个类。

同理也在对话框上添加两个按钮,分别接收源路径,和目标路径。

不过接收的方法需要通过CFileDialog选择对话框,而不能再和

一样啦。

复制文件,vc中有已有的函数CopyFile。

参数是两个复制的路径。

删除文件夹

在删除文件夹之前,首先要删除文件夹下的所有文件,再删除文件夹。

该功能的实现也是利用递归,先判断文件夹下是否有文件,若有,则删除,没有则删除文件夹,返回。

删除文件

定义一个类CMyFileDialog继承CFileDialog而来,重写OnInitDialog函数来设置对话框中按钮的文本。

创建一个CMyFileDialog对象,在删除文件对话框中,选择想要删除的文件,调用DeleteFile函数进行文件的删除。

退出程序

设置一个退出子菜单,发送一个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文件");

fileDlg.m_ofn.lpstrFilter=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,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2