




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、-. z評(píng)定等級(jí)操作系統(tǒng)課程設(shè)計(jì)文件系統(tǒng)管理學(xué)院計(jì)算機(jī)學(xué)院專(zhuān)業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)*2013年1月8日工業(yè)大學(xué)計(jì)算機(jī)學(xué)院制文件系統(tǒng)管理一、實(shí)驗(yàn)?zāi)康哪M文件系統(tǒng)的實(shí)現(xiàn)的根本功能,了解文件系統(tǒng)的根本構(gòu)造和文件系統(tǒng)的管理方法看,加深了解文件系統(tǒng)的部功能的實(shí)現(xiàn)。通過(guò)高級(jí)語(yǔ)言編寫(xiě)和實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件系統(tǒng),模擬文件管理的工作過(guò)程,從而對(duì)各種文件操作系統(tǒng)命令的實(shí)質(zhì)容和執(zhí)行過(guò)程有比擬深入的了解。二、實(shí)驗(yàn)容和要求編程模擬一個(gè)簡(jiǎn)單的文件系統(tǒng),實(shí)現(xiàn)文件系統(tǒng)的管理和控制功能。在用戶(hù)程序過(guò)使用文件系統(tǒng)提供的create,open,read,write,close,delete等文件命令,對(duì)文件進(jìn)展操作。以下報(bào)告主要包括
2、:1.可行性分析2.需求分析3.概要設(shè)計(jì)4.詳細(xì)設(shè)計(jì)5.測(cè)試6.總結(jié)三、可行性分析1、技術(shù)可行性對(duì)于圖形編程還不了解,但是經(jīng)過(guò)本學(xué)期的三次實(shí)驗(yàn)的練習(xí),可以設(shè)計(jì)好命令操作界面。利用大二期間學(xué)習(xí)的數(shù)據(jù)構(gòu)造可以模擬出此課程設(shè)計(jì)的要求。2、經(jīng)濟(jì)可行性課程設(shè)計(jì)作為本課程的練習(xí)及進(jìn)一步加深理解。與經(jīng)濟(jì)無(wú)關(guān),可以不考慮。零花費(fèi),零收益3.法律可行性自己編寫(xiě)的程序,僅為練習(xí),不作其他用途,與外界沒(méi)什么聯(lián)系,可行。四、需求分析編寫(xiě)程序?qū)崿F(xiàn)文件系統(tǒng),主要有以下幾點(diǎn)要求:1、實(shí)現(xiàn)無(wú)窮級(jí)目錄管理及文件管理根本操作2、實(shí)現(xiàn)共享別名3、加快了文件檢索五、概要設(shè)計(jì)為了克制單級(jí)目錄所存在的缺點(diǎn),可以為每一位用戶(hù)建立一個(gè)單獨(dú)的
3、用戶(hù)文件目錄UFDUser File Directory。這些文件目錄可以具有相似的構(gòu)造,它由用戶(hù)所有文件的文件控制塊組成。此外,在系統(tǒng)中再建立一個(gè)主文件目錄MFD Master File Directory;在主文件目錄中,每個(gè)用戶(hù)目錄文件都占有一個(gè)目錄項(xiàng),其目錄項(xiàng)中包括用戶(hù)名和指向該用戶(hù)目錄的指針。本設(shè)計(jì)主要實(shí)現(xiàn)下面幾個(gè)數(shù)據(jù)構(gòu)造:M D F用戶(hù)名文件目錄指針用戶(hù)名文件目錄指針U F D文件名保護(hù)碼文件長(zhǎng)度文件名A F D翻開(kāi)文件名翻開(kāi)保護(hù)碼讀寫(xiě)指針總體的流程圖如下:六、詳細(xì)設(shè)計(jì)主要數(shù)據(jù)構(gòu)造:1.MFDMaster File Directory,主要用以存放用戶(hù),可以增加存放密碼的字符數(shù)組,
4、本設(shè)計(jì)沒(méi)有平安方面的憂(yōu)慮,為了使用時(shí)操作更簡(jiǎn)單省去密碼。所以,MFD構(gòu)造僅包括用戶(hù)名和指向子目錄的一個(gè)指針,以及指向下一用戶(hù)的連接點(diǎn),為線(xiàn)性構(gòu)造。struct MFD char name20; /用戶(hù)名 UFD *bst_pointer; /文件目錄指針 MFD *link;2. UFDUser File Directory,用于存放文件的數(shù)據(jù)構(gòu)造。由于本設(shè)計(jì)為了加快檢索速度,使用了二叉排序樹(shù)的構(gòu)造,所以UFD構(gòu)造中相應(yīng)參加了用于樹(shù)構(gòu)造的parent,leftchild,和rightchild記錄情況。當(dāng)本文件為普通文件時(shí),為下級(jí)記錄申請(qǐng)AFDfile,folder為空。同樣,當(dāng)本文件為文件夾
5、時(shí),為它申請(qǐng)相應(yīng)的空間,AFD為空。以此來(lái)到達(dá)無(wú)窮級(jí)別目錄的存儲(chǔ)。struct UFD UFD *parent; UFD *leftchild; UFD *rightchild; UFD *folder; /作為文件夾時(shí)指向下一層,文件時(shí)為空 UFD *pre_folder; /指向上一層目錄文件夾時(shí)用到 AFD *file; /作文文件時(shí)文件的具體容 char name30; /文件夾名字 int length; /作為文件時(shí)文件的長(zhǎng)度,默認(rèn)為0 char rw; /讀寫(xiě)標(biāo)志r or w char share; /共享標(biāo)志y or n char file_folder; /指示此文件是文件或
6、文件夾,f為文件,o為文件夾;3.AFD,存放文件的容的構(gòu)造,比擬簡(jiǎn)單,文件容用一個(gè)字符數(shù)組存儲(chǔ),為順序構(gòu)造,最多可存放99個(gè)字符struct AFD char afd_file100; int read; /讀指針 int write; /寫(xiě)指針;4.RECstruct REC /UFD的線(xiàn)性鏈,用于記錄共享文件和已翻開(kāi)文件 UFD *file; REC *link;關(guān)鍵函數(shù)說(shuō)明:void Log_in(); /登陸void Init_user(); /創(chuàng)立用戶(hù)void Check_user(); /查看用戶(hù)以上三個(gè)函數(shù)為開(kāi)場(chǎng)時(shí)管理用戶(hù)創(chuàng)立和登陸的函數(shù)。開(kāi)場(chǎng)時(shí)沒(méi)有用戶(hù),需要?jiǎng)?chuàng)立后才可登陸。創(chuàng)
7、立用戶(hù)即自動(dòng)分配一個(gè)存放用戶(hù)文件的UFD,此時(shí)的UFD為空,需要后續(xù)的創(chuàng)立文件以及文件夾的分配。UFD *operations(UFD *fileBST); /文件夾的操作調(diào)用用戶(hù)登陸后即開(kāi)場(chǎng)對(duì)該用戶(hù)文件UFD的操作,同時(shí),假設(shè)在文件夾中創(chuàng)立一個(gè)文件夾,它同樣可以分配得到一個(gè)UFD,對(duì)用戶(hù)文件的操作可以重復(fù)調(diào)用,以此來(lái)到達(dá)無(wú)窮級(jí)目錄的操作。在里層文件的操作和外層的是一樣的,但假設(shè)要退回外層文件夾就需要逐層返回,不能立即跳到*一層*地址。操作完畢后返回改變后的文件存儲(chǔ)狀態(tài)。void fcreate(UFD *fileBST); /對(duì)文件夾的六個(gè)根本操作UFD *fdelete(UFD *file
8、BST);void fopen(UFD *fileBST);void fclose(UFD *fileBST);void fread_write(UFD *fileBST,char f); /讀寫(xiě)操作。按選擇f=5為讀6為寫(xiě)以上五個(gè)函數(shù)為對(duì)文件的六個(gè)根本操作,其中讀文件和寫(xiě)文件局部代碼一樣,所以由一個(gè)函數(shù)完成。在create五個(gè)函數(shù)中,分別對(duì)文件夾fileBST做了相應(yīng)的處理,由于刪除文件的函數(shù)可能會(huì)刪除到頭結(jié)點(diǎn),所以需要一個(gè)返回值。void insertBST(UFD *fileBST,UFD *newBST); /在fileBST中插入新的結(jié)點(diǎn)newBSTUFD *searchBST(UF
9、D *fileBST,char name); /在fileBST樹(shù)中查找名字為name的結(jié) /點(diǎn)并返回該結(jié)點(diǎn),文件不存在則返回空void BSTtraverse(UFD *fileBST); /遍歷二叉樹(shù)UFD *deleteBST(UFD *fileBST,char name30); /刪除name結(jié)點(diǎn),返回刪除后的結(jié)點(diǎn)由于該設(shè)計(jì)的存儲(chǔ)構(gòu)造用到了二叉排序樹(shù),所以把相關(guān)的操作寫(xiě)成函數(shù),供根本操作的函數(shù)調(diào)用。insert函數(shù)在fileBST中插入新的結(jié)點(diǎn)newBST;search函數(shù)在fileBST樹(shù)中查找名字為name的結(jié)點(diǎn)并返回該結(jié)點(diǎn),文件不存在則返回空;還有traverse和delete函
10、數(shù)對(duì)二叉排序樹(shù)做了根本的操作。void print_path(UFD *fileBST); /輸出當(dāng)前路徑void print_open_file(); /輸出已翻開(kāi)的文件為了在文件系統(tǒng)中使用戶(hù)看出路徑及一些相關(guān)的狀態(tài),設(shè)置了輸出文件路徑的函數(shù),路徑由每個(gè)文件的構(gòu)造體中pre_folder記錄上一層的文件夾名字,這樣逐層輸出即可到達(dá)目的。每執(zhí)行一次操作就輸出一次已翻開(kāi)的文件的具體情況,翻開(kāi)的文件應(yīng)及時(shí)關(guān)閉,否則刪除時(shí)會(huì)有刪除失敗提示。UFD *check_share(char name30); /在共享鏈中檢查是否有name文件,有則/返回該UFD,沒(méi)則NULLvoid del_in_shar
11、e(UFD *node); /在共享鏈中刪除node結(jié)點(diǎn)以上兩個(gè)函數(shù)為對(duì)共享文件的處理函數(shù),當(dāng)翻開(kāi)或讀寫(xiě)文件時(shí)在本層文件中未找到相應(yīng)的文件時(shí),就用check_share函數(shù)在共享文件中查找,如果存在就返回該文件的UFD,不存在就返回NULL,而del_in_share函數(shù)是伴隨著刪除文件的函數(shù)出現(xiàn)的,目的是為了刪除文件以后不會(huì)在共享鏈中再存在。具體代碼如下:filesysterm.hstruct AFD char afd_file100; int read; /讀指針 int write; /寫(xiě)指針;struct UFD UFD *parent; UFD *leftchild; UFD *ri
12、ghtchild; UFD *folder; /作為文件夾時(shí)指向下一層,文件時(shí)為空UFD *pre_folder; /指向上一層目錄文件夾時(shí)用到 AFD *file; /作文文件時(shí)文件的具體容 char name30; /文件夾名字 int length; /作為文件時(shí)文件的長(zhǎng)度,默認(rèn)為0 char rw; /讀寫(xiě)標(biāo)志r or w char share; /共享標(biāo)志y or n char file_folder; /指示此文件是文件或文件夾,f為文件,o為文件夾;struct MFD char name20; /用戶(hù)名 UFD *bst_pointer; /文件目錄指針 MFD *link;s
13、truct REC /UFD的線(xiàn)性鏈,用于記錄共享文件和已翻開(kāi)文件 UFD *file; REC *link;void Log_in(); /登陸void Init_user(); /創(chuàng)立用戶(hù)void Check_user(); /查看用戶(hù)UFD *operations(UFD *fileBST); /文件夾的操作調(diào)用,user不為空時(shí)為第一層void fcreate(UFD *fileBST); /對(duì)文件夾的六個(gè)根本操作UFD *fdelete(UFD *fileBST);void fopen(UFD *fileBST);void fclose(UFD *fileBST);void frea
14、d_write(UFD *fileBST,char f); /代碼有重復(fù),合并讀寫(xiě)操作。按選擇s=5為讀6為寫(xiě)void insertBST(UFD *fileBST,UFD *newBST); /新文件插入到user文件樹(shù)中UFD *searchBST(UFD *fileBST,char name); /在fileBST樹(shù)中查找名字為name的結(jié)點(diǎn)并返回該結(jié)點(diǎn) /文件不存在則返回空void BSTtraverse(UFD *fileBST); /遍歷二叉樹(shù)UFD *deleteBST(UFD *fileBST,char name30); /刪除成功返回1,失敗返回0void print_pat
15、h(UFD *fileBST); /輸出當(dāng)前路徑void print_open_file(); /輸出已翻開(kāi)的文件UFD *check_share(char name30); /在共享鏈中檢查是否有name文件,有則返回UFD,沒(méi)則NULLvoid del_in_share(UFD *node); /在共享鏈中刪除node結(jié)點(diǎn)main.cpp#include #include#includefilesystem.hMFD *mfd_link=NULL; /用戶(hù)鏈表MFD *pre_user; /當(dāng)前操作用戶(hù)UFD *pre_opera_folder=NULL;/當(dāng)前操作文件夾int folde
16、r_depth=0; /記錄當(dāng)前文件深度用于輔助pre_folder的初始化REC *share_file=NULL;REC *open_file=NULL;void print_path(UFD *fileBST) /輸出路徑 if(fileBST-pre_folder!=NULL) print_path(fileBST-pre_folder); printf(/%s,fileBST-pre_folder-name); else printf(/%s,pre_user-name);void print_open_file() REC *temp; int i=5; temp=open_fil
17、e; while(temp!=NULL) printf(%st%dtt,temp-file-name,temp-file-length); if(temp-file-rw=r)printf(只讀t); else printf(可讀寫(xiě)t); if(temp-file-share=y)printf(是t); else printf(否t); for(i=0;ifile-file-afd_filei!=0) printf(%c,temp-file-file-afd_filei); else break; if(temp-file-file-afd_filei!=0&i=5) printf(.); p
18、rintf(n); temp=temp-link; void BSTtraverse(UFD *fileBST) /遍歷二叉樹(shù)前序遍歷 UFD *left,*right; printf(%s,fileBST-name); if(fileBST-file_folder=o) /輸出.以區(qū)分文件夾 printf(.t); else printf(t); if(fileBST-leftchild!=NULL) /遞歸 left=fileBST-leftchild; BSTtraverse(left); if(fileBST-rightchild!=NULL) right=fileBST-rightc
19、hild; BSTtraverse(right); UFD *searchBST(UFD *fileBST,char name30)/在fileBST樹(shù)中查找名字為name的結(jié)點(diǎn)并返回該結(jié)點(diǎn) /文件不存在則返回空 int flag; flag=strcmp(fileBST-name,name); if(flag=0) return fileBST; /查找成功 else if(flag0) if(fileBST-leftchild=NULL) return NULL; /查找失敗 else searchBST(fileBST-leftchild,name); /遞歸調(diào)用 else if(fil
20、eBST-rightchild=NULL) return NULL; else searchBST(fileBST-rightchild,name); void insertBST(UFD *fileBST,UFD *newBST) /將結(jié)點(diǎn)newBST插入原二叉樹(shù)fileBST中 int flag; flag=strcmp(fileBST-name,newBST-name); if(flag0) if(fileBST-leftchild=NULL) /插入 fileBST-leftchild=newBST; newBST-parent=fileBST; else insertBST(file
21、BST-leftchild,newBST); /遞歸調(diào)用 else if(fileBST-rightchild=NULL) /插入 fileBST-rightchild=newBST; newBST-parent=fileBST; else insertBST(fileBST-rightchild,newBST); /遞歸調(diào)用 /*flag=0 的情況已在創(chuàng)立時(shí)排除*/UFD *deleteBST(UFD *fileBST,char name30)/刪除名字問(wèn)name的文件結(jié)點(diǎn) UFD *parent_file=NULL,*del_file=NULL; UFD *move_file=NULL,
22、*move_file_parent; del_file=searchBST(fileBST,name); if(del_file=NULL) printf(沒(méi)有此文件,刪除失??!n);getch(); return fileBST; /查找失敗 if(del_file-file_folder=o&strcmp(del_file-folder-name,NULL)!=0) printf(注意,本系統(tǒng)未能實(shí)現(xiàn)級(jí)聯(lián)刪除,請(qǐng)先逐個(gè)刪除文件!); printf(文件夾非空,刪除失??!n);getch(); return fileBST; if(del_file-share=y) /先在共享鏈中刪除 de
23、l_in_share(del_file); parent_file=del_file-parent; if(del_file-leftchild=NULL&del_file-rightchild=NULL) /被刪除結(jié)點(diǎn)為子葉結(jié)點(diǎn) if(del_file=fileBST) /只有一個(gè)結(jié)點(diǎn) strcpy(fileBST-name,NULL); else if(parent_file-leftchild=del_file) parent_file-leftchild=NULL;free(del_file); elseparent_file-rightchild=NULL;free(del_file
24、); else if(del_file-leftchild=NULL|del_file-rightchild=NULL) /被刪除結(jié)點(diǎn)沒(méi)有做孩子或右孩子 if(del_file-leftchild=NULL) /沒(méi)有左孩子 if(parent_file=NULL)/刪除的為根結(jié)點(diǎn)fileBST=del_file-rightchild;del_file-rightchild-parent=NULL; else if(parent_file-leftchild=del_file) /右孩子接上 parent_file-leftchild=del_file-rightchild; del_file-
25、rightchild-parent=parent_file; else /右孩子接上 parent_file-rightchild=del_file-rightchild; del_file-rightchild-parent=parent_file; else /沒(méi)有右孩子 if(parent_file=NULL)/刪除的為根結(jié)點(diǎn)fileBST=del_file-leftchild;del_file-leftchild-parent=NULL; else if(parent_file-leftchild=del_file) /左孩子接上 parent_file-leftchild=del_f
26、ile-leftchild; del_file-leftchild-parent=parent_file; else /左孩子接上 parent_file-rightchild=del_file-leftchild; del_file-leftchild-parent=parent_file; free(del_file); else /左右孩子都有 move_file_parent=del_file-leftchild; move_file=move_file_parent-rightchild; if(move_file=NULL) /被刪除結(jié)點(diǎn)的左孩子沒(méi)有右孩子 if(parent_fi
27、le=NULL) /刪除的為根結(jié)點(diǎn) fileBST=move_file_parent; fileBST-rightchild=del_file-rightchild; fileBST-parent=NULL; else if(parent_file-leftchild=del_file) parent_file-leftchild=move_file_parent; else parent_file-rightchild=move_file_parent; move_file_parent-parent=parent_file; move_file_parent-rightchild=del_
28、file-rightchild; else while(move_file-rightchild!=NULL) /尋找右邊最底下的結(jié)點(diǎn) move_file=move_file-rightchild; move_file_parent=move_file_parent-rightchild; move_file_parent-rightchild=NULL; move_file-leftchild=del_file-leftchild; move_file-rightchild=del_file-rightchild; if(move_file-rightchild!=NULL) move_fi
29、le-rightchild-parent=move_file; /右孩子的雙親也要改變 move_file-parent=del_file-parent; if(fileBST=del_file) /刪除的為根結(jié)點(diǎn) fileBST=move_file; free(del_file); printf(成功刪除文件%sn,name); getch(); return fileBST;void del_in_share(UFD *node) REC *first,*second; first=share_file; second=share_file-link; if(second=NULL) sh
30、are_file=NULL;free(first); else do if(second-file=node) first-link=second-link;free(second); else first=first-link; second=second-link; while(second!=NULL);void fcreate(UFD *fileBST) /在fileBST的同一層創(chuàng)立文件 char s;char name30;int flag=0; UFD *newfile,*temp=NULL; REC *stemp;system(cls); printf(-n); printf(
31、- 文 件 系 統(tǒng)/創(chuàng) 建 文 件-n); printf(-nn); do printf( 1. 創(chuàng)立文件 n); printf( 2. 創(chuàng)立文件夾 n); printf( 3. 取消 n); printf(請(qǐng)選擇:n); scanf(%c,&s); fflush(stdin); if(s=3)return; if(s!=1&s!=2) printf(輸入錯(cuò)誤,請(qǐng)重新輸入!n); while(s!=1&s!=2);if(strcmp(fileBST-name,NULL)=0) /節(jié)點(diǎn)已有未賦值用于本層文件夾的第一個(gè)文件的特殊情況 newfile=fileBST;elsenewfile=(UFD
32、*)malloc(sizeof(UFD); /創(chuàng)立樹(shù)節(jié)點(diǎn)newfile-leftchild=NULL;newfile-rightchild=NULL; printf(請(qǐng)輸入文件夾名:); scanf(%s,name); fflush(stdin); /搜索二叉樹(shù),文件重名就創(chuàng)立失敗 temp=searchBST(fileBST,name); if(temp!=NULL) printf(已存在該文件夾,創(chuàng)立失?。); strcpy(newfile-name,NULL); return; strcpy(newfile-name,name);if(folder_depth=1) newfile-p
33、re_folder=NULL;elsenewfile-pre_folder=pre_opera_folder;/指向正在操作文件夾 while(1) /讀寫(xiě)否,共享否 printf(只讀r還是可讀寫(xiě)w:); scanf(%c,&(newfile-rw); fflush(stdin); printf(是否共享y/n:); scanf(%c,&(newfile-share); fflush(stdin); if(newfile-rw=r|newfile-rw=w)&(newfile-share=y|newfile-share=n) break; printf(輸入有誤,請(qǐng)重新輸入!n); /*以下
34、為文件和文件夾初始化中不同的地方* if(s=1) newfile-file_folder=f; newfile-folder=NULL; newfile-file=(AFD*)malloc(sizeof(AFD); printf(請(qǐng)輸入文件的容file-afd_file); fflush(stdin); newfile-length=strlen(newfile-file-afd_file); else /文件夾的初始化 newfile-file_folder=o; newfile-file=NULL; newfile-length=0; newfile-folder=(UFD*)mallo
35、c(sizeof(UFD); /連上一個(gè)空文件節(jié)點(diǎn)newfile-folder-pre_folder=newfile; newfile-folder-leftchild=NULL; strcpy(newfile-folder-name,NULL); newfile-folder-rightchild=NULL; /*if(fileBST!=newfile)insertBST(fileBST,newfile); /初始化完成后插入到二叉樹(shù)中 else newfile-parent=NULL;/第一個(gè)結(jié)點(diǎn)略去插入,其雙親結(jié)點(diǎn)為空if(newfile-share=y) /接入共享鏈 stemp=(R
36、EC*)malloc(sizeof(REC); stemp-file=newfile; stemp-link=share_file; share_file=stemp; UFD *fdelete(UFD *fileBST) /在fileBST的同一層刪除文件 char name30;REC *temp; printf(請(qǐng)輸入要?jiǎng)h除的文件:); scanf(%s,name); fflush(stdin);temp=open_file; /檢查文件是否翻開(kāi),翻開(kāi)則刪除失敗while(temp!=NULL) if(strcmp(temp-file-name,name)=0) printf(文件翻開(kāi)中
37、,請(qǐng)關(guān)閉后再刪除!); getch(); return fileBST; else temp=temp-link; fileBST=deleteBST(fileBST,name); return fileBST;void fopen(UFD *fileBST) char name30; UFD *temp=NULL,*temp1=NULL; printf(請(qǐng)輸入要翻開(kāi)的文件的名字:); scanf(%s,name); fflush(stdin); temp=searchBST(fileBST,name); if(temp=NULL) printf(文件不存在!n); temp=check_sh
38、are(name); if(temp=NULL) printf(文件不存在!n); return; /*找到文件,以下為翻開(kāi)局部* if(temp-file_folder=o) /翻開(kāi)文件夾 folder_depth+; temp1=pre_opera_folder; /保護(hù)正在操作文件 pre_opera_folder=temp; temp-folder=operations(temp-folder); pre_opera_folder=temp1; /寫(xiě)回 folder_depth-; else /翻開(kāi)文件 REC *newopen; newopen=(REC*)malloc(sizeof
39、(REC);/接入翻開(kāi)鏈 newopen-file=temp; newopen-link=open_file; open_file=newopen; printf(已成功翻開(kāi)問(wèn)%s!n,temp-name); getch(); void fclose() char name30; REC *first=NULL,*second=NULL; printf(請(qǐng)輸入要關(guān)閉的文件:); scanf(%s,name); fflush(stdin); first=open_file; if(first=NULL)printf(沒(méi)有翻開(kāi)的文件n);getch();return; else second=fi
40、rst-link; if(second=NULL&strcmp(first-file-name,name)=0) free(first); open_file=NULL; printf(成功關(guān)閉文件%sn!,name); return; else while(second!=NULL) if(strcmp(second-file-name,name)=0) first-link=second-link; free(second); printf(成功關(guān)閉文件%sn!,name); return; else first=first-link;second=second-link; printf(
41、沒(méi)有找到問(wèn)件%s,關(guān)閉失敗!n,name);void fread_write(UFD *fileBST,char f) char s; char name30; char newfile100; UFD *temp=NULL; if(f=5) printf(請(qǐng)輸入要讀取的文件的名字:); else printf(請(qǐng)輸入要寫(xiě)入的文件的名字:); scanf(%s,name); fflush(stdin); temp=searchBST(fileBST,name); if(temp=NULL) printf(文件不存在!n); temp=check_share(name); if(temp=NUL
42、L) printf(文件不存在!n); return; if(temp-file_folder=o) printf(文件夾不可讀寫(xiě)!); return; printf(文件的容是:%snnn,temp-file-afd_file);getch(); if(f=5)return; /讀取文件操作到此完畢 if(temp-rw=r) printf(只讀文件,不可寫(xiě)入!n); return; else /追加或重寫(xiě) do system(cls); printf( 1. 追加 n); printf( 2. 重寫(xiě) n); printf( 3. 取消 n); printf(請(qǐng)選擇:n); scanf(%c
43、,&s); fflush(stdin); if(s=3)return; if(s!=1&s!=2) printf(輸入錯(cuò)誤,請(qǐng)重新輸入!n); while(s!=1&s!=2); printf(請(qǐng)輸入要重寫(xiě)或追加的容file-afd_file,newfile); else strcpy(temp-file-afd_file,newfile); temp-length=strlen(temp-file-afd_file); UFD *check_share(char name30) char s; UFD *temp=NULL; REC *stemp=NULL; printf(共享文件夾為:n)
44、; stemp=share_file; while(stemp!=NULL) printf(%s,stemp-file-name); if(stemp-file-file_folder=f)printf(t); else printf(.t); stemp=stemp-link; printf(n是否嘗試在共享文件夾中翻開(kāi)(y/n):); do s=getchar(); if(s=n|s=N)return NULL; else if(s=y|s=Y)break; else printf(輸入錯(cuò)誤,請(qǐng)重新輸入:); while(s!=y&s!=n&s!=Y&s!=N); stemp=share_
45、file; while(stemp!=NULL) if(strcmp(stemp-file-name,name)=0) temp=stemp-file;break; stemp=stemp-link; return temp;UFD *operations(UFD *fileBST) while(1) char s; system(cls); if(open_file!=NULL) printf(已翻開(kāi)文件,請(qǐng)及時(shí)關(guān)閉!n); printf(文件名t文件長(zhǎng)度t讀寫(xiě)t共享t容); printf(n); print_open_file();printf(n); printf(當(dāng)前路徑:); pri
46、nt_path(fileBST);printf(n); if(strcmp(fileBST-name,NULL)=0) printf(本層文件為空!n); else printf(本文件夾包含以下文件:n); BSTtraverse(fileBST); printf(n); printf( 1. 創(chuàng)立文件 create n); printf( 2. 刪除文件 delete n); printf( 3. 翻開(kāi)文件 open n); printf( 4. 關(guān)閉文件 close n); printf( 5. 讀文件 read n); printf( 6. 寫(xiě)文件 write n); printf(
47、0. 返回上一層/注銷(xiāo) nn); printf(請(qǐng)選擇: ); printf(); scanf(%c,&s); fflush(stdin); switch(s) case 1: fcreate(fileBST); break; case 2: fileBST=fdelete(fileBST); break; case 3: fopen(fileBST); break; case 4: fclose(); break; case 5: case 6: fread_write(fileBST,s); break; case 0: return fileBST; default:break; voi
48、d Log_in() MFD *temp=NULL; char name30; char flag=0; if(mfd_link=NULL) printf(目前還沒(méi)有創(chuàng)立用戶(hù),請(qǐng)創(chuàng)立后再登陸!); getch(); return; do printf(請(qǐng)輸入用戶(hù)名:); scanf(%s,name); fflush(stdin); if(strcmp(name,cancel)=0) return; /取消登陸 temp=mfd_link; while(temp!=NULL) if(strcmp(name,temp-name)=0) pre_user=temp; folder_depth+; p
49、re_opera_folder=temp-bst_pointer; temp-bst_pointer=operations(temp-bst_pointer); /進(jìn)入文件操作 pre_opera_folder=NULL; folder_depth-; flag=1;return; else temp=temp-link; printf(用戶(hù)不存在,請(qǐng)重新輸入! 輸入cancel取消登陸); /防止使用者忘記登陸名printf(n); while(1);void Init_user() char name30; MFD *newmfd,*temp=NULL,*temp1=NULL; print
50、f(請(qǐng)輸入用戶(hù)名:); scanf(%s,name); /輸入名字 fflush(stdin); printf(n); temp=mfd_link;if(temp!=NULL)doif(strcmp(temp-name,name)=0) printf(用戶(hù)已存在,創(chuàng)立失敗!n);getch();return;if(temp-link=NULL)temp1=temp;temp=temp-link;while(temp!=NULL); newmfd=(MFD*)malloc(sizeof(MFD); strcpy(newmfd-name,name); newmfd-bst_pointer=(UFD*)malloc(sizeof(UFD); /創(chuàng)立一個(gè)空的文件夾newmfd-bst_pointer-pre_folder=NULL; newmfd-b
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二年級(jí)下冊(cè)數(shù)學(xué)教案-1.4《分草莓》北師大版
- 2025年合伙終止合同模板
- Unit 5 animal friends Lesson 5 教學(xué)設(shè)計(jì) 2024-2025學(xué)年冀教版(2024)七年級(jí)英語(yǔ)上冊(cè)
- 《山坡羊 潼關(guān)懷古》歷年中考古詩(shī)欣賞試題匯編(截至2022年)
- 2025年河南對(duì)外經(jīng)濟(jì)貿(mào)易職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 2024年兩系雜交水稻新組合項(xiàng)目資金籌措計(jì)劃書(shū)代可行性研究報(bào)告
- 2025年貴陽(yáng)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)一套
- 2025年呼倫貝爾職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)新版
- 2025年哈爾濱傳媒職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)含答案
- 2025年度文化旅游景區(qū)門(mén)面房屋出售及文創(chuàng)產(chǎn)品開(kāi)發(fā)合同
- 人教版小學(xué)數(shù)學(xué)一年級(jí)下冊(cè)教案
- 新版人音版小學(xué)音樂(lè)一年級(jí)下冊(cè)全冊(cè)教案
- 60萬(wàn)噸年磷石膏綜合利用項(xiàng)目資金申請(qǐng)報(bào)告模板定制
- 氣管切開(kāi)病人的護(hù)理查房PPT課件
- 小學(xué)五年級(jí)下冊(cè)綜合實(shí)踐活動(dòng).話(huà)說(shuō)節(jié)儉-(13張)ppt
- 日順電子酒店智能房控管理系統(tǒng)說(shuō)明書(shū)
- 急診與災(zāi)難醫(yī)學(xué)第二版配套課件 02 急性發(fā)熱
- 部編版四年級(jí)道德與法治下冊(cè)4《買(mǎi)東西的學(xué)問(wèn)》第1課時(shí)課件
- 公因數(shù)、最大公因數(shù)的應(yīng)用
- CBT主要技術(shù)精品課件
- 常用液壓元件型號(hào)對(duì)照表230
評(píng)論
0/150
提交評(píng)論