文件管理系統(tǒng)C++_第1頁(yè)
文件管理系統(tǒng)C++_第2頁(yè)
文件管理系統(tǒng)C++_第3頁(yè)
文件管理系統(tǒng)C++_第4頁(yè)
文件管理系統(tǒng)C++_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、目錄一. 課程設(shè)計(jì)目的及要求二. 相關(guān)知識(shí)三. 題目分析四. 概要設(shè)計(jì)五. 代碼及流程20六. 運(yùn)行結(jié)果七.設(shè)計(jì)心得錯(cuò)誤!未定義書(shū)簽。八.參考文獻(xiàn)23.課程設(shè)計(jì)目的及要求深入了解文件管理系統(tǒng),初步掌握文件管理系統(tǒng)的實(shí)現(xiàn)方法。用高級(jí)語(yǔ)言編寫(xiě)和調(diào)試一個(gè)簡(jiǎn)單的文件系統(tǒng),模擬文件管理的工作過(guò)程。從而對(duì)各 種文件操作命令的實(shí)質(zhì)內(nèi)容和執(zhí)行過(guò)程有比較深入的了解。編寫(xiě)一程序,模擬一個(gè)簡(jiǎn)單的文件管理系統(tǒng)。樹(shù)型結(jié)構(gòu),目錄下可以是目錄,也可以是 文件。cd 目錄名 dir 目錄名 md 目錄名 rd 目錄名 edit 文件名 del 文件名 exit在此文件管理系統(tǒng),可實(shí)現(xiàn)的操作有:格式 格式 格式 格式改變目錄:

2、格式 顯示目錄:格式創(chuàng)建目錄:刪除目錄:新建文件:退出文件系統(tǒng):刪除文件:相關(guān)知識(shí)1. 文件結(jié)構(gòu)體struct FileNodechar filenameFILENAME_LEN;/ 文件名 /目錄名int isdir;/目錄文件識(shí)別標(biāo)志int i_nlink;/文件的鏈接數(shù)int adr;/文件的地址struct FileNode *p are nt, *child;/指向父親的指針和指向左孩子的指針struct FileNode *sibli ng_prev, *sibli ng_next;/ 指向前一個(gè)兄弟的指針和指向后一個(gè)兄弟的指針.""整個(gè)文件系統(tǒng)采用二叉樹(shù)型存儲(chǔ)

3、結(jié)構(gòu),初始化文件樹(shù)如下:nuEr1 1Ar1 1 1/ I1etcXux«rbinA 1 *1 I -1 12 1fti1 1*1 1 4=1 1圖2-1初始目錄樹(shù)2. 所使用函數(shù)及其功能int Mai n(); / 主函數(shù)void Init();/初始化文件樹(shù)int ParseComma nd();/接受輸入的命令并把其分解成操作名和路徑文件名void ExecuteCommand();/執(zhí)行命令,分別執(zhí)行 cd,edit,md,del,rd, dir,exit 命令 in t cdComd(); /改變目錄功能處理int editComd();/處理edit命令,即創(chuàng)建文件,只要

4、創(chuàng)建表示文件的節(jié)點(diǎn)即可,內(nèi)容及大 小不考慮int mdComd(); / 創(chuàng)建目錄int delComd();/處理del命令,即刪除指定文件,不存在是給出錯(cuò)誤信息int dirComd();/處理dir命令,顯示目錄in t rdComd(); / 刪除目錄int Fin dFile name(char P ara2);/查找文件名struct FileNode* CreateFileNode(char filename,int isdir,int i_nlink);/ 創(chuàng)建結(jié)點(diǎn)int GetI npu t(char* buffer,u nsig ned int buffer_le n);/

5、 獲取輸入3. 所使用的變量struct FileNode *cp, *tp, *root;/ *cp, *tp, *root 是根目錄節(jié)點(diǎn)char pathINPUT_LEN-COMMAND_LEN;/ 記錄當(dāng)前走過(guò)的路徑char P ara1COMMAND_LEN, Para2IN PUT_LEN-COMMAND_LEN;/para1數(shù)組存儲(chǔ)輸入的命令, para2數(shù)組存儲(chǔ)輸入的文件名char file nameFILENAME_LEN,t mp;un sig ned int i,j;題目分析1.文件系統(tǒng)采用二叉樹(shù)型存儲(chǔ)結(jié)構(gòu),結(jié)點(diǎn)結(jié)構(gòu)如下:struct FileNodechar filen

6、ameFILENAME_LEN;/ 文件名 / 目錄名int isdir;/int i_nli nk;/int adr;/目錄、文件的識(shí)別標(biāo)志(0為文件,1為目錄) 文件的鏈接數(shù)文件的地址指向父親的指針和指向左孩子的指針*sibli ng_next;/指向前一個(gè)兄弟的指針和指向struct FileNode *p are nt, *child;/struct FileNode *sibling_prev,后一個(gè)兄弟的指針.;2目錄名和文件名支持全路徑名和相對(duì)路徑名,路徑名各分量間用“/”隔開(kāi)3. 功能具體描述:改變目錄:改變當(dāng)前工作目錄,目錄不存在時(shí)給出出錯(cuò)信息顯示目錄:顯示指定目錄下或當(dāng)前目

7、錄下所有文件和一級(jí)目錄(選做:帶/s參數(shù)的dir命令,顯示所有子目錄)創(chuàng)建目錄:在指定路徑或當(dāng)前路徑下創(chuàng)建指定目錄。重名時(shí)給出錯(cuò)信息。刪除目錄:刪除指定目錄下所有文件和子目錄。要?jiǎng)h目錄不空時(shí),要給出提示是否要?jiǎng)h 除。創(chuàng)建文件:創(chuàng)建指定名字的文件,只要?jiǎng)?chuàng)建表示文件的節(jié)點(diǎn)即可,內(nèi)容及大小不考慮。 刪除文件:刪除指定文件,不存在時(shí)給出出錯(cuò)信息。退出文件系統(tǒng):exit4、總體流程:初始化文件目錄;輸出提示符,等待接受命令,分析鍵入的命令;對(duì)合法的命令,執(zhí)行相應(yīng)的處理程序,否則輸出錯(cuò)誤信息,繼續(xù)等待新命令,直到鍵入 EXIT退出為止。四.概要設(shè)計(jì)1 .在內(nèi)存中開(kāi)辟一個(gè)虛擬磁盤(pán)空間作為文件存儲(chǔ)器,在其上實(shí)

8、現(xiàn)一個(gè)簡(jiǎn)單的單用戶文 件系統(tǒng)。2 .文件存儲(chǔ)空間的分配采用顯式鏈接分配。為了實(shí)現(xiàn)創(chuàng)建和刪除文件必須要有一棵初 始的文件樹(shù)存在,以便在文件樹(shù)的根節(jié)點(diǎn)下實(shí)現(xiàn)創(chuàng)建和刪除文件。3.數(shù)據(jù)結(jié)構(gòu)與樹(shù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相 互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。樹(shù)是一種重要的非線性數(shù)據(jù)結(jié)構(gòu),直觀地看,它是數(shù)據(jù)元素(在樹(shù)中稱為結(jié)點(diǎn))按分支 關(guān)系組織起來(lái)的結(jié)構(gòu),很象自然界中的樹(shù)那樣。樹(shù)中每個(gè)分叉點(diǎn)稱為結(jié)點(diǎn),起始結(jié)點(diǎn)稱 為樹(shù)根,任意兩個(gè)結(jié)點(diǎn)間的連接關(guān)系稱為樹(shù)枝,結(jié)點(diǎn)下面不再有分枝稱為樹(shù)葉。結(jié)點(diǎn)的 前趨結(jié)點(diǎn)稱為該結(jié)點(diǎn)的"雙親",結(jié)點(diǎn)的后趨結(jié)點(diǎn)稱為該結(jié)點(diǎn)的

9、"孩子",同一結(jié)點(diǎn)的"孩子" 之間互稱"兄弟"。4 .文件目錄結(jié)構(gòu)采用多級(jí)目錄結(jié)構(gòu)。為了簡(jiǎn)單起見(jiàn),可以使用文件結(jié)構(gòu)體,結(jié)構(gòu)體內(nèi)容包括:文件名,文件目錄識(shí)別標(biāo)示,文件鏈接數(shù),以及他的左孩子右孩子左兄弟右兄 弟指5. 要有分解函數(shù)對(duì)輸入的命令進(jìn)行分解。以識(shí)別那部分是哪部分是命令,哪部分是路 徑和文件名。6.最后要有執(zhí)行函數(shù)。來(lái)執(zhí)行輸入的創(chuàng)建文件命令。五.代碼及流程圖5-1主函數(shù)流程圖2)edit()創(chuàng)建文件函數(shù)流程圖圖5-3刪除函數(shù)流程圖4) ParseCommand(分解命令函數(shù)流程圖5)改變目錄函數(shù)rdComdOr曲* ,丙s鏡* &

10、#171;鼻±叭IB if計(jì)桑特亨藝,:J At *«0由重丘柑a 圖5-5改變目錄函數(shù)流程圖源代碼:#in clude <stdio.h>#i nclude <iostream>#in clude <stri ng.h>#in clude <ct yp e.h>#in clude <stdlib.h>#defi ne FILENAME_LEN 21#defi ne INPU T_LEN 81#define COMMAND LEN 11 using n ames pace std;void Init();/初始化文

11、件樹(shù)int P arseComma nd();/接受輸入的命令并把其分解成操作名和路徑文件名void ExecuteCommand();/ 執(zhí)行命令int cdComd();/ 處理 cd 命令int editComd();/ 處理 edit 命令int delComdO;/ 處理 del 命令int dirComd();/ 處理 dir 命令int mdComd();/ 處理 md 命令int rdComdO;/ 處理 rd 命令int FindPath(char *ph);/尋找參數(shù) ph所指向的路徑int FindFilename(char Para2);/從參數(shù)Para2中找到要建立或

12、刪除的文件、目錄名,并把指針只想其 父親結(jié)點(diǎn)struct FileNode* CreateFileNode(char file name,i nt isdir,i nt i_n li nk);/創(chuàng)建結(jié)點(diǎn)int GetI np ut(char* buffer,u nsig ned int buffer_le n);/ 獲取輸入int CheckCommand();/ 命令檢查int GetDir(i nt begi n, char *p ath,char *curDir);/ 獲取路徑struct FileNode *cp, *t p, *root;char pathIN PU T_LEN-CO

13、MMAND_LEN;/記錄當(dāng)前走過(guò)的路徑char P ara1COMMAND_LEN, Para2IN PU T_LEN-COMMAND_LEN;char curpathI NPU T_LEN-COMMAND_LEN,tm pp athI NPU T_LEN-COMMAND_LEN;char file nameFILENAME_LEN,t mp;un sig ned int i,j;/i nt i,j;struct FileNode / 結(jié)點(diǎn)結(jié)構(gòu)char filenameFILENAME_LEN;/文件名 /目錄名int isdir;/目錄文件識(shí)別標(biāo)志int i_nlink;/文件的鏈接數(shù)st

14、ruct FileNode *parent, *child;/指向父親的指針和指向左孩子的指針struct FileNode *sibli ng_p rev, *sibli ng_n ext;/ 指向前一個(gè)兄弟的指針和指向后一個(gè)兄弟的指針 ;/創(chuàng)建結(jié)點(diǎn)struct FileNode* CreateFileNode(char file name,i nt isdir,i nt i_n li nk)struct FileNode* node=(struct FileNode*)malloc(sizeof(struct FileNode);/ 申請(qǐng)結(jié)點(diǎn)空間/相應(yīng)內(nèi)容賦初值strc py(no de-

15、>file name,file name);no de->isdir=isdir;no de->i_ nii nk=i_ nii nk;no de->paren t=NULL;n ode->child=NULL;no de->sibli ng_p rev=NULL;no de->sibli ng_n ext=NULL;retur n no de;/初始化文件樹(shù)void Ini t() struct FileNode *bi nN ode,*usrNode, *un ixNode,*etcNode,*libNode,*userNode, *bi nN o

16、de2,*liuNode,*su nN ode,*ftiNode;strcpy(path,"/"); /根目錄寫(xiě)入當(dāng)前路徑/創(chuàng)建文件樹(shù)的結(jié)點(diǎn)bi nN ode=CreateFileNode("bi n",1,0); usrNode=CreateFileNode("usr",1,0);un ixNode=CreateFileNode("u ni x",0,0); etcNode=CreateFileNode("etc",1,0); libNode=CreateFileNode("lib&

17、quot;,1,0); userNode=CreateFileNode("user",1,0);bi nN ode2=CreateFileNode("bi n",1,0); liuNode=CreateFileNode("liu",1,0);su nN ode=CreateFileNode("su n",1,0); ftiNode=CreateFileNode("fti",1,0);cp=tp=root=CreateFileNode("/",1,0);/結(jié)點(diǎn)相應(yīng)內(nèi)容賦值roo

18、t- >paren t=NULL; root->child=b inN ode;root->sibli ng_p rev=root->sibli ng_n ext=NULL;binN ode->paren t=root;binN ode->child=NULL;binN ode->sibli ng_p rev=NULL; bi nN ode->sibli ng_n ext=usrNode;usrNode->paren t=NULL; usrNode->child=libNode; usrNode->sibli ng_p rev=

19、b inN ode; usrNode->sibli ng_n ext=uni xNode;uni xNode->paren t=NULL;un ixNode->child=NULL;un ixNode->sibli ng_p rev=usrNode; uni xNode->sibli ng_n ext=etcNode;etcNode-> paren t=NULL; etcNode->child=NULL; etcNode->sibli ng_p rev= uni xNode; etcNode->sibli ng_next=NULL;libN

20、ode->paren t=usrNode; libNode->child=liuNode; libNode->sibli ng_prev=NULL; libNode->sibli ng_n ext=userNode;userNode->paren t=NULL; userNode->child=NULL; userNode->sibli ng_p rev=libNode; userNode->sibli ng_n ext=b inN ode2;binN ode2-> pare nt=NULL;binN ode2->child=NULL

21、;binN ode2->sibli ng_p rev=userNode;binN ode2->sibli ng_n ext=NULL;liuNode->paren t=libNode; liuNode->child=NULL; liuNode->sibli ng_prev=NULL; liuNode->sibli ng_n ext=s unN ode;sunN ode->paren t=NULL;sunN ode->child=NULL;sunN ode->sibli ng_p rev=liuNode;sunN ode->sibli

22、ng_n ext=ftiNode;ftiNode-> pare nt=NULL; ftiNode->child=NULL; ftiNode->sibli ng_p rev=s unN ode; ftiNode->sibli ng_n ext=NULL;獲取文件或目錄名,并把指針指向其父親結(jié)點(diǎn)int Fin dFile name(char P ara2)i=strle n(P ara2)-1;j=0;while (P ara2i!=7'&& i>=0)file namej=P ara2i;i-; j+;file namej='0

23、9;/獲得逆序的文件或目錄名,存入 file name中 if(i<0) Para2i+1='0'else Para2i='0'j-;/filename逆轉(zhuǎn),獲得正確的文件或目錄名for(i=0;i<strle n( file name)/2;i+,j-) tmp=file namei;file namei=file namej;file namej=t mp;if(strle n(P ara2)>0) 查找路徑int sig n=Fi ndP ath (P ara2);if(sig n=0)return 0; return 1;/緩沖區(qū)安全輸

24、入子函數(shù)buffer_le n-1長(zhǎng)度的輸入,/如果輸入超過(guò)buffer_len,則截取前 /buffer_len處字符用70'代替 int GetI npu t(char* buffer,u nsig ned int buffer_le n) un sig ned int coun t=0;while(co un t<buffer_le n) if(buffercou nt=getchar()=10) buffercou nt='0'retur n count;coun t+; while(getchar()!=10);bufferbuffer_le n-1=&

25、#39;0' return -1;II改變目錄函數(shù)int cdComd() if(!CheckCommand() / 命令檢查return 0;if(strcmp(Para2,".")=0) 對(duì) cd.命令的處理int i;while(c p->sibli ng_prev) cp=cp->sibli ng_p rev;if(cp->parent) cp=cp->parent; /找到父親結(jié)點(diǎn) else return 0; /對(duì)當(dāng)前路徑進(jìn)行相應(yīng)處理i=strle n(p ath);while( pathi!=7'&&i

26、>0) i-;if(i!=0) pathi='0'elsep athi+1='0'else FindP ath( Para2);/ 查找路徑 return 1;/創(chuàng)建目錄函數(shù)int mdComd() struct FileNode * temp ,*t p;tem p=CreateFileNode("",1,0);int sig n;if(strle n(P ara2)=0) / 參數(shù)不能為空printf("n命令格式有錯(cuò)誤.n");return 0;if(strle n(P ara2)>20) 長(zhǎng)度檢查pri

27、ntf("n目錄名過(guò)長(zhǎng)rr); return 0;/格式檢查if (!(isal pha( Para20)| Para20='_'| Para20='0'| Para20=7')printf(”目錄名格式有錯(cuò)!n”);/*目錄首字母可以為字母'或數(shù)字或'/'*/ return 0;sig n=Fin dFile name (P ara2);/獲取目錄名if(sig n=0)return 0;if(c p->isdir!=1) /如當(dāng)前指針指向的是文件,則報(bào)錯(cuò)prin tf("you cannot edit

28、 a directory in un der a file!n"); return 0;tp=CreateFileNode(file name,1,0);/創(chuàng)建目錄結(jié)點(diǎn),并插入到指定目錄下if(c p->child=NULL)tp->paren t=c p;tp->child=NULL;cp->child=t p;tp->sibli ng_p rev=NULL;tp->sibli ng_n ext=NULL;else temp=cp;/用temp找到新結(jié)點(diǎn)插入處temp=te mp->child;while(te mp->sibli n

29、g_n ext ) /find the last sib ing nodetemp=temp->sibli ng_n ext;if(strcm p(temp->file name,file name)=0&&temp->isdir=1) printf("此目錄名已存在n");/重名報(bào)錯(cuò) return 0;/找到了最后一個(gè)結(jié)點(diǎn)temp->sibli ng_n ext=t p;tp-> paren t=NULL;tp->child=NULL;tp->sibli ng_p rev=te mp;tp->sibli ng

30、_n ext=NULL;return 1;刪除目錄函數(shù)int rdComd() int sig n;struct FileNode *te mp;char cmd2;if(!CheckCommand() / 命令檢查return 0;sign=FindFilename(Para2); / 獲取目錄名if(sig n=0) return 0;if(cp->child) /用temp指向要?jiǎng)h除的結(jié)點(diǎn)temp=cp->child;while(te mp->sibli ng_n ext && (strc mp (te mp->file name,file nam

31、e)!=0 | temp->isdir!=1) temp=temp->sibli ng_n ext;if(strc mp (te mp->file name,file name)!=0) printf("不存在該目錄!n");return 0;else printf(”不存在該目錄!n"); return 0;if(temp->isdir!=1) prin tf("ERROR!return 0;if(tem p->child)/要?jiǎng)h除的不能是文件 該命令只能刪除目錄,不可刪除文件!n");/如仍有用戶使用該目錄,則

32、不能刪除Y/N!n");printf("n該目錄不為空,您確定要?jiǎng)h除嗎?GetI np ut(cmd,2);if(strc mp (cmd," rr)=O|strc mp (cmd,"N")=O) return 0;刪除工作if(te mp-> pare nt=NULL) /不是第一個(gè)孩子temp->sibli ng_p rev->sibli ng_n ext=te mp->sibli ng_n ext;if(temp->sibling_next)/處理是最后一個(gè)兄弟的情況 temp->sibli ng_n

33、ext->sibli ng_p rev=te mp->sibli ng_prev; temp->sibli ng_p rev=te mp->sibli ng_n ext=NULL;/ifelse /第一個(gè)孩子if(temp->sibling_next)/處理是最后一個(gè)兄弟的情況 temp->sibli ng_n ext- >paren t=te mp->parent; temp->paren t->child=te mp->sibli ng_n ext;free(te mp); return 1;顯示目錄子函數(shù)int dirCo

34、md() if(strlen(Para2)>0) int sign=FindPath(Para2); / 查找路徑if(sig n=0) return 0; elseprin tf("n%s>", p ath);if(cp !=root)prin tf("<DIR>if(cp->child=NULL) / 指定目錄為空 return 0;tp=cp;tp=tp->child;/指定目錄不為空,顯示其所有子目錄及文件名while(t P)%sn",".");if(t p->isdir) prin

35、tf(”elseprintf(”<DIR><FILE>%sn ”,t p->file name);%sn ”,t p->file name);tp=tp->sibli ng_n ext; return 0;創(chuàng)建文件函數(shù)int editComdO struct FileNode * tem p=CreateFileNode("",0,0);int sig n;struct FileNode *tp;if(strle n(P ara2)=0) / 路徑不能為空printf("n命令格式有錯(cuò)誤.n");return 0

36、;if(strle n(P ara2)>20) 長(zhǎng)度檢查printf("n文件名過(guò)長(zhǎng)rr);return 0;/格式檢查if (!(isal pha( Para20)| Para20='_'| Para20='0'| Para20=7')printf(”文件名格式有錯(cuò)!n”);/*文件首字母可以為字母'或數(shù)字或'_'或7'或回車'*/ return 0;sign=FindFilename(Para2);/ 獲取文件名if(sig n=0)return 0;if(cp->isdir!=1) 如當(dāng)

37、前指針指向的是文件,則報(bào)錯(cuò)prin tf("you cannot edit a file in un der a file!n"); return 0;/創(chuàng)建文件結(jié)點(diǎn),并插入到指定目錄下tp=CreateFileNode("",1,0);strc py(tp->file name,file name);tp->isdir=0;tp->i_n li nk=0;if(c p->child=NULL) tp->paren t=c p;tp->child=NULL;cp->child=t p;tp->sibli n

38、g_p rev=NULL;tp->sibli ng_n ext=NULL;else temp=cp;temp=temp->child;/用temp找到新結(jié)點(diǎn)插入處while(te mp->sibli ng_n ext ) /find the last sib ing nodetemp=temp->sibli ng_n ext;if(strcm p(te mp->file name,file name)=0&&temp->isdir=O) printf(”此文件名已存在,請(qǐng)重新輸入n"); /重名報(bào)錯(cuò) return 0;/找到了最后一

39、個(gè)結(jié)點(diǎn)temp->sibli ng_n ext=t p;tp-> paren t=NULL;tp->child=NULL;tp->sibli ng_p rev=te mp;tp->sibli ng_n ext=NULL;return 1;刪除文件子函數(shù)int delComd() int sig n;struct FileNode *te mp;if(strle n(P ara2)=0) / 參數(shù)不能為空printf("n命令格式有錯(cuò)誤.n");return 0;sig n=Fi ndFile name( Para2);獲取文件名if(sig n

40、=0) return 0;if(cp->child) /用temp指向要?jiǎng)h除的結(jié)點(diǎn)temp=cp->child;while(te mp->sibli ng_n ext&&(strcm p(temp->file name,file name)!=0|te mp->isdir!=0) temp=temp->sibli ng_n ext;if(strc mp (te mp->file name,file name)!=0) printf("不存在該文件!n");return 0;else printf(”不存在該文件!n&

41、quot;);return 0;if(te mp->isdir!=0) 要?jiǎng)h除的不能是目錄printf("ERROR!該命令只能刪除文件,不可刪除目錄!n");return 0;if(tem p->i_nli nk!=0) /如仍有用戶使用該文件,則不能刪除printf(”還有用戶共享了該文件,不能刪除!n");return 0;刪除工作if(te mp-> pare nt=NULL) /不是第一個(gè)孩子temp->sibli ng_p rev->sibli ng_n ext=te mp->sibli ng_n ext; if(t

42、emp->sibling_next)/處理是最后一個(gè)兄弟的情況temp->sibli ng_n ext->sibli ng_p rev=te mp->sibli ng_prev; temp->sibli ng_p rev=te mp->sibli ng_n ext=NULL;else /第一個(gè)孩子if(temp->sibling_next)/處理是最后一個(gè)兄弟的情況 temp->sibli ng_n ext- >paren t=te mp->parent; temp->paren t->child=te mp->si

43、bli ng_n ext;free(te mp); return 1;獲取當(dāng)前目錄名子函數(shù)int GetDir(i nt begi n, char *p ath,char *curDir) int i=0;int len=strle n(p ath);while(!( pathbegi n='')|( pathbegi n=7') &&beg i* le n) curDiri+=p athbeg in+;curDiri='0'retur n begi n+1;/查找路徑函數(shù)int FindP ath(char *ph) struct Fi

44、leNode *tem p; /struct FileNode *tp ,*te mp; char old pathIN PU T_LEN-COMMAND_LEN;un sig ned int i=0; /int i=0int sig n=1;/ph是根目錄if(strcm p(p h,"/")=0) cp=root; strc py( path,"/"); return 1;temp=cp;strcpy(oldpath,path);/保留原路徑和指針if(p h0=7')/指針指向根目錄的左孩子cp=root->child;i+; / 濾

45、過(guò)'/'strc py( path,"/");else if(cp!=NULL&&cp!=root)strcat (p ath,"/");if(cp&&cp->child) if(cp->isdir)cp=cp->child;/指針指向當(dāng)前目錄的左孩子else printf(” 路徑錯(cuò)誤!n");return 0;while(i<=strle n(p h)&&cp) /繼續(xù)查找指定路徑,如遇到文件則報(bào)錯(cuò)int j=0;if(p hi=7'&&

46、amp;cp->child) i+; / 略過(guò)'/'if(cp->isdir)cp=cp->child; /繼續(xù)查找下級(jí)目錄else printf(” 路徑錯(cuò)誤!n");return 0;strcat (p ath,"/");while( phi!=7'&&i <=strle n(p h) / curpath記錄當(dāng)前要找的路徑名curp athj=p hi;i+; j+;curpathj='0'while(strc mp(cp->file name,cur path)!=0|(c

47、 p->isdir!=1) )&&cp->sibli ng_n ext!=NULL) cp=cp->sibli ng_n ext; if(strc mp(cp->file name,cur path)=0)if(cp->isdir=0) strc py(p ath,old path);cp=temp;printf(”是文件不是目錄.n");return 0;strcat (p ath,c p->file name);if(strc mp(cp->file name,cur path)!=O|c p=NULL) strc py(

48、p ath,old path);cp=temp;printf("輸入路徑錯(cuò)誤n");return 0;return 1;/命令檢查函數(shù)int CheckComma nd() if(strle n(P ara2)=0) printf(”命令語(yǔ)法不正確.n"); return 0;return 1;分解命令子函數(shù)int P arseComma nd() char Inpu tsIN PU T_LEN;int i=0,j=0,ch;un sig ned int k=0;prin tf("%s>", path);if(Get Inp ut(l n

49、pu ts,IN PU T_LEN)=-1) 獲取輸入printf(”輸入行太長(zhǎng).n");return 0;P ara10=Para20='0'獲取參數(shù)Para1,即操作名while(I npu tsi!=' '&&lnp utsi!='0'&&i <COMMAND_LEN-1) P ara1i=I np utsi;i+;P ara1i='0'if(i=(COMMAND_LEN-1) return 1;/ 輸入命令太長(zhǎng)if(Inputsi!='0') II獲取參數(shù)2,

50、即路徑文件名while(I np utsi=' '&&i<INPU T_LEN-1) i+; j=0; while(I npu tsi!='0'&&i<INPU T_LEN-1) Para2j=I npu tsi;i+; j+;Para2j='0'for(k=0;k<strle n(P ara1);k+)將操作名全部轉(zhuǎn)換成小寫(xiě)字母ch=tolower(i nt)P ara1k);Para1k=ch;return 1;/執(zhí)行命令函數(shù)void ExecuteComma nd() int sig n;根

51、據(jù)參數(shù)Para1調(diào)用相應(yīng)的功能處理模塊if(strc mp(P ara1,"cd")=0)sign=cdComd(); /cd 命令else if(strcm p(P ara1,"edit")=0)sign=editComd();/edit 命令else if(strcm p(P ara1,"md")=0)sig n=mdComd(); /else if(strcm p(P ara1,"del")=0)sign=delComd();/del 命令else if(strcm p(P ara1,"rd&quo

52、t;)=0)sig n=rdComd();else if(strc mp(P ara1,"dir")=0)sign=dirComd();/dir 命令/exit命令else if(strcm p(P ara1,"exit")=0)exit(0);elseprintf(”命令錯(cuò)誤,請(qǐng)重試n"); /命令輸入不正確,報(bào)錯(cuò)int mai n() Init(); II初始化文件樹(shù)whileif(P arseComma nd()分解命令ExecuteComma nd();/ 執(zhí)行命令 return 0;六.運(yùn)行結(jié)果1顯示根目錄下所有文件和目錄I E:0Sa300205Debug1sjtX 文畔管瑾套

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論