簡單文件管理系統(tǒng)設(shè)計_第1頁
簡單文件管理系統(tǒng)設(shè)計_第2頁
簡單文件管理系統(tǒng)設(shè)計_第3頁
簡單文件管理系統(tǒng)設(shè)計_第4頁
簡單文件管理系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

.PAGE.目錄一、題目和要求2二、相關(guān)原理分析和總的設(shè)計思想2三、數(shù)據(jù)結(jié)構(gòu)和流程圖4四、源程序6五、運行結(jié)果18六、自我評析與總結(jié)24一、題目和要求<1> 題目:簡單文件管理系統(tǒng)的設(shè)計及實現(xiàn)<2> 要求:根據(jù)文件系統(tǒng)的相關(guān)原理,設(shè)計并用C或C++編程實現(xiàn)一個類似Windows系統(tǒng)中"我的電腦"功能的文件管理系統(tǒng),該文件系統(tǒng)可以對系統(tǒng)中所有文件進行管理,同時具有創(chuàng)建新文件、刪除文件、復(fù)制文件、創(chuàng)建文件夾等功能。二、相關(guān)原理分析和總的設(shè)計思想基于MFCAppWizard框架的程序定制一個菜單,有添加四個子菜單,創(chuàng)建,復(fù)制,刪除,退出,在前三個子菜單中添加四個菜單項,文件夾,TXT,WORD,EXCEL。每個菜單項對應(yīng)著一種功能。且復(fù)制選擇路徑都是基于對話框,操作方便,簡潔明了。eq\o\ac<○,1>創(chuàng)建文件夾;要創(chuàng)建文件夾,首先要選擇文件夾創(chuàng)建的位置,可以用到瀏覽文件夾的函數(shù)SHBrowseForFolder和兩個結(jié)構(gòu)BROWSEINFO和ITEMIDLIST,要想得到文件夾路徑可以用SHGetPathFromIDList,當(dāng)然程序要想擁有建立文件夾的功能,應(yīng)該設(shè)置BROWSEINFO對象的ulFlags的參數(shù)有BIF_NEWDIALOGSTYLE;eq\o\ac<○,2>創(chuàng)建文件;不管是創(chuàng)建txt文件,word文件,excel文件原理都一樣??梢詫懸粋€build函數(shù),提供幾個參數(shù):標(biāo)題title,路徑filter,擴展名defExt。這樣創(chuàng)建文件時,可以根據(jù)標(biāo)題,路徑,擴展名的不同調(diào)用build函數(shù),達(dá)到不同功能的目的 在build函數(shù)體中使用CFileDialog定義一個對象來創(chuàng)建文件。eq\o\ac<○,3>復(fù)制文件夾;第一步:復(fù)制文件夾可以在一個對話框中完成,這樣必然需要添加一個類CCopyDlg。第二步:在該對話框上設(shè)置兩個按鈕,一個按鈕來選擇源文件夾,保存源文件路徑;一個按鈕來選擇目標(biāo)文件夾,保存目標(biāo)文件路徑。選擇路徑的方法可以與步驟eq\o\ac<○,1>的方法相同。第三步:重寫確定消息應(yīng)用程序來實現(xiàn)從一個目錄復(fù)制到另一個目錄的功能〔copyFiles。下面是copyFiles函數(shù)的實現(xiàn)原理: 首先打開指定的文件夾進行搜索,再利用一個while循環(huán),從當(dāng)前目錄搜索文件,判斷搜索到的是不是"."和".."目錄,如果是文件夾的話,進行遞歸;如果是文件,進行復(fù)制。eq\o\ac<○,4>復(fù)制文件;復(fù)制文件跟復(fù)制文件夾一樣也需要創(chuàng)建一個對話框,添加一個類。同理也在對話框上添加兩個按鈕,分別接收源路徑,和目標(biāo)路徑。不過接收的方法需要通過CFileDialog選擇對話框,而不能再和eq\o\ac<○,1>一樣啦。復(fù)制文件,vc中有已有的函數(shù)CopyFile。參數(shù)是兩個復(fù)制的路徑。eq\o\ac<○,5>刪除文件夾 在刪除文件夾之前,首先要刪除文件夾下的所有文件,再刪除文件夾。該功能的實現(xiàn)也是利用遞歸,先判斷文件夾下是否有文件,若有,則刪除,沒有則刪除文件夾,返回。eq\o\ac<○,6>刪除文件定義一個類CMyFileDialog繼承CFileDialog而來,重寫OnInitDialog函數(shù)來設(shè)置對話框中按鈕的文本。創(chuàng)建一個CMyFileDialog對象,在刪除文件對話框中,選擇想要刪除的文件,調(diào)用DeleteFile函數(shù)進行文件的刪除。eq\o\ac<○,7>退出程序 設(shè)置一個退出子菜單,發(fā)送一個WM_CLOSE消息,關(guān)閉程序退出。三、數(shù)據(jù)結(jié)構(gòu)和流程圖該程序沒有使用到復(fù)雜的數(shù)據(jù)結(jié)構(gòu),是基于MFCAppWizard應(yīng)用程序。主流程圖:為使流程圖簡單些,將創(chuàng)建,復(fù)制,刪除放一起,用"|"字符連接起來,代表"或"的意選擇文件夾路徑的流程圖:四、源程序〔1定制一個菜單,添加5個子菜單,并分別設(shè)置它們的Popup,包括:創(chuàng)建<true>、復(fù)制<true>、刪除<true>、幫助、退出<false>。 在子菜單中添加它們的菜單項。如下所示:創(chuàng)建:文件夾,TXT,WORD,EXCEL復(fù)制:文件夾,TXT,WORD,EXCEL刪除:文件夾,TXT,WORD,EXCEL幫助:關(guān)于DMS<&A>...退出〔2創(chuàng)建文件夾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創(chuàng)建文件的函數(shù)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<>> {//創(chuàng)建一個文檔 CFilefile<fileDlg.GetFileName<>,CFile::modeCreate>; file.Close<>; }}創(chuàng)建txt文件:voidCMainFrame::OnBuildTxt<>{ //創(chuàng)建一個Txt文檔 build<TEXT<"新建Txt文檔">,TEXT<"TextFiles<*.txt>\0*.txt\0">, TEXT<"txt">>;}創(chuàng)建word文檔:voidCMainFrame::OnBuildWord<>{ //創(chuàng)建一個Word文檔 build<TEXT<"新建Word文檔">, TEXT<"TextFiles<*.doc>\0*.doc\0">,TEXT<"doc">>;}創(chuàng)建excel工作表:voidCMainFrame::OnBuildExcel<>{ //創(chuàng)建一個Excel工作表 build<TEXT<"新建Excel工作表">,TEXT<"TextFiles<*.xls>\0*.xls\0">,TEXT<"xls">>;}創(chuàng)建txt、word、excel都是調(diào)用build函數(shù)。〔4復(fù)制文件夾添加一個類:CCopyDlg;在對話框上添加兩個按鈕,"選擇源文件夾","選擇目標(biāo)文件夾";選擇路徑的函數(shù):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;}分別對這兩個按鈕進行響應(yīng):voidCCopyDlg::OnBnClickedButton1<>{ //獲得源文件夾的路徑 m_strBgnPath=selectPath<TEXT<"選擇源文件夾">>;}voidCCopyDlg::OnBnClickedButton2<>{ //獲得目標(biāo)文件夾的路徑 m_strEndPath=selectPath<TEXT<"選擇目標(biāo)文件夾">>;}再添加一個復(fù)制函數(shù):BOOLcopyFiles<CStringstrSrcPath,CStringstrDstPath>{//創(chuàng)建目標(biāo)文件夾CreateDirectory<strDstPath,NULL>;CFileFindfinder;//打開指定的文件夾進行搜索BOOLbWorking=finder.FindFile<strSrcPath+TEXT<"\\*.*">>;while<bWorking>{//從當(dāng)前目錄搜索文件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{//如果是文件,進行復(fù)制if<!CopyFile<strSrc,strDst,FALSE>>returnfalse;}}}returntrue;}對確定按鈕的消息響應(yīng)函數(shù)重寫:voidCCopyDlg::OnBnClickedOk<>{ copyFiles<m_strBgnPath,m_strEndPath>; OnOK<>;}最后對菜單項:復(fù)制文件夾的響應(yīng):voidCMainFrame::OnCopyFolder<>{ //彈出一個復(fù)制文件夾的對話框 CCopyDlgdlg; dlg.DoModal<>;}〔5復(fù)制txt文件添加一個類:CTxtDlg;先對兩個按鈕,"選擇源Txt文件""選擇目的Txt文件"進行響應(yīng):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<>; }}再對"確定"按鈕進行響應(yīng):voidCTxtDlg::OnBnClickedOk<>{ BOOLtempFile=CopyFile<m_strBgnPath,m_strEndPath,FALSE>; intitemp=GetLastError<>; if<!tempFile> { MessageBox<TEXT<"文件復(fù)制失敗">>; } else { MessageBox<TEXT<"文件復(fù)制成功">>; } OnOK<>;}最后對菜單項:復(fù)制txt文件的響應(yīng):voidCMainFrame::OnCopyTxt<>{//彈出一個復(fù)制Txt文件的對話框 CTxtDlgdlg; dlg.DoModal<>;}〔6復(fù)制word文檔添加一個類:CWordDlg;對兩個按鈕,"選擇源Word文檔""選擇目的Word文檔"進行響應(yīng):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<>; }}再對"確定"按鈕進行響應(yīng):voidCWordDlg::OnBnClickedOk<>{BOOLtempFile=CopyFile<m_strBgnPath,m_strEndPath,FALSE>; intitemp=GetLastError<>; if<!tempFile> { MessageBox<TEXT<"文件復(fù)制失敗">>; } else { MessageBox<TEXT<"文件復(fù)制成功">>; } OnOK<>;}最后對菜單項:復(fù)制word文檔的響應(yīng):voidCMainFrame::OnCopyWord<>{ //彈出一個復(fù)制Word文件的對話框 CWordDlgdlg; dlg.DoModal<>;}〔7復(fù)制excel工作表添加一個類:CExcelDlg;對兩個按鈕進行響應(yīng):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<>; }}再對確定按鈕進行響應(yīng):voidCExcelDlg::OnBnClickedOk<>{ BOOLtempFile=CopyFile<m_strBgnPath,m_strEndPath,FALSE>; intitemp=GetLastError<>; if<!tempFile> { MessageBox<TEXT<"文件復(fù)制失敗">>; } else { MessageBox<TEXT<"文件復(fù)制成功">>; } OnOK<>;}最后對菜單項:復(fù)制excel工作表的響應(yīng):voidCMainFrame::OnCopyExcel<>{ //彈出一個復(fù)制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函數(shù):BOOLCMyFileDialog::OnInitDialog<void>{ //設(shè)置對話框上按鈕的文本 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<>{ //發(fā)送一個退出程序的消息 SendMessage<WM_CLOSE>;}<14>修改窗口的標(biāo)題在PreCreateWindow函數(shù)體中添加如下代碼://CREATESTRUCTcs來修改窗口類或樣式 cs.style&=~FWS_ADDTOTITLE; cs.lpszName=TEXT<"簡單文件管理系統(tǒng)">;〔15隱藏工具欄將以前的工具欄隱藏,在OnCreate函數(shù)體中添加如下代碼: m_wndToolBar.ShowWindow<SW_HIDE>;五、運行結(jié)果程序的主界面:窗口的標(biāo)題"簡單文件管理系統(tǒng)"它有三個彈出式子菜單:"創(chuàng)建""復(fù)制

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論