文件系統(tǒng)實(shí)驗(yàn)報(bào)告

上傳人:jun****875 文檔編號(hào):17755894 上傳時(shí)間:2020-12-05 格式:DOC 頁(yè)數(shù):26 大小:121.91KB
收藏 版權(quán)申訴 舉報(bào) 下載
文件系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
第1頁(yè) / 共26頁(yè)
文件系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
第2頁(yè) / 共26頁(yè)
文件系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
第3頁(yè) / 共26頁(yè)

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《文件系統(tǒng)實(shí)驗(yàn)報(bào)告》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《文件系統(tǒng)實(shí)驗(yàn)報(bào)告(26頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 試驗(yàn)四 文件系統(tǒng) 一、 實(shí)驗(yàn)?zāi)康? 1、 用高級(jí)語(yǔ)言編寫(xiě)和調(diào)試一個(gè)簡(jiǎn)單的文件系統(tǒng),模擬文件管理的工作過(guò)程。從而對(duì)各種文件操作命令的實(shí)質(zhì)內(nèi)容和執(zhí)行過(guò)程有比較深入的了解。 2、 要求設(shè)計(jì)一個(gè)n個(gè)用戶(hù)的文件系統(tǒng),每次用戶(hù)可以保存M個(gè)文件。用戶(hù)在一次運(yùn)行中只能打開(kāi)一個(gè)文件,對(duì)文件必須設(shè)置保護(hù)措施,且至少有create、delete、open、close、read、write等命令。 二、 實(shí)驗(yàn)題目: 采用二級(jí)目錄結(jié)構(gòu)實(shí)現(xiàn)磁盤(pán)文件操作。 要求: 1.普通文件的目錄項(xiàng)包括文件名,文件類(lèi)型,文件長(zhǎng)度,指向文件內(nèi)容的指針內(nèi)容。 2.目錄文件的目

2、錄項(xiàng)包括目錄名,指向下一級(jí)目錄塊的指針內(nèi)容。假定每個(gè)目錄文件最多只能占用一個(gè)塊; 3.程序功能方面的要求: 需要實(shí)現(xiàn)一個(gè)命令行操作界面,包含如下命令: 4.程序?qū)崿F(xiàn)方面的要求: (1)、對(duì)于重名(創(chuàng)建時(shí)),文件不存在(刪除時(shí)),目錄不存在(改變目錄時(shí))等錯(cuò)誤操作情況,程序應(yīng)該做出相應(yīng)處理并給出錯(cuò)誤信息,但是程序不得因此而退出。 (2)、界面友好,程序強(qiáng)壯。 (3)、設(shè)置界面的提示符,提示的命令以及調(diào)試的方法應(yīng)和前面的要求一致。不要自己設(shè)計(jì)命令或者附加不要求的功能。 三.實(shí)驗(yàn)源程序文件名: Filesystem_s.cpp 執(zhí)行文件名: Proj

3、ect1.exe 四.實(shí)驗(yàn)分析 1)總論: 該系統(tǒng)是一個(gè)多用戶(hù)、多任務(wù)的實(shí)時(shí)操作系統(tǒng)。對(duì)用戶(hù)和用戶(hù)的文件數(shù)目并沒(méi)有上限。也就是說(shuō)該系統(tǒng)允許任何用戶(hù)申請(qǐng)空間,而且在其目錄下的文件數(shù)目并不做任何的限制。 該系統(tǒng)的操作命令如下: ①、 bye-用戶(hù)注銷(xiāo)命令。當(dāng)使用該命令時(shí),用戶(hù)退出系統(tǒng)。命令格式: run\bye↙系統(tǒng)注銷(xiāo)該用戶(hù)并回到登陸界面。 ②、 close-刪除用戶(hù)注冊(cè)信息命令。執(zhí)行該命令后,用戶(hù)在系統(tǒng)中的所有信息,包括該用戶(hù)目錄下的所有文件都被刪除。命令格式:run\close↙.完成后返回登陸界面。 ③、 create-在當(dāng)前目錄下創(chuàng)建一個(gè)文件,且該文件不能跟系統(tǒng)

4、中的文件重名。該文件的管理信息登錄到用戶(hù)文件信息管理模塊中。命令格式:run\create>file1↙。其中file1為要?jiǎng)?chuàng)建的文件名稱(chēng)。執(zhí)行完該命令后回到執(zhí)行命令行。 ④、 delete-刪除當(dāng)前用戶(hù)目錄下的一個(gè)文件。命令格式:run\delete>file1↙。返回命令行。 ⑤、 list-顯示當(dāng)前注冊(cè)目錄下的所有文件信息,包括文件名、文件長(zhǎng)度、文件操作權(quán)限。命令格式:run\list↙。 ⑥、 chmod-改變某個(gè)文件的執(zhí)行權(quán)限,但前提是該文件是該用戶(hù)目錄下的文件。命令格式:run\chmod>file1↙。 ⑦、 open-在window界面下打開(kāi)某個(gè)文件。命令格:run\o

5、pen>file1↙。執(zhí)行該命令后,文件file1將用在windows界面下的文件形式打開(kāi)。用戶(hù)可以在這個(gè)方式中對(duì)文件進(jìn)行修改,并將修改后的內(nèi)容保存。 ⑧、 read-讀文件信息。將文件信息讀入并顯示在終端。命令格式:run\read>file1↙。 ⑨、 write-向某個(gè)文件寫(xiě)入新的信息。用戶(hù)可以選擇用覆蓋原來(lái)內(nèi)容的方式和在文件的末尾插入新信息的方式寫(xiě)入信息。 2)_系統(tǒng)采用二級(jí)文件目錄。設(shè)置主目錄(MFD)和用戶(hù)文件目錄(UFD),分別以文件的方式保存在磁盤(pán)中。在主目錄中又注冊(cè)用戶(hù)的用戶(hù)名和另一標(biāo)志該用戶(hù)目錄下是否有文件的指針標(biāo)記。用戶(hù)文件目錄用用戶(hù)名作為文件名保存在磁盤(pán),以

6、便檢索時(shí)方便對(duì)應(yīng)。在用戶(hù)文件目錄中保存著該目錄下所有的文件的文件名稱(chēng)、保護(hù)碼、文件長(zhǎng)度。 3) 該系統(tǒng)大量使用高級(jí)語(yǔ)言中的文件操作函數(shù),所以能實(shí)際看到文件的創(chuàng)建寫(xiě)入、讀出、刪除等效果。 4) 實(shí)驗(yàn)流程圖 開(kāi)始 選項(xiàng) 用戶(hù)登錄 新用戶(hù)注冊(cè) 退出程序 結(jié)束 在MFD中找到該用戶(hù)? 初始化命令關(guān)鍵字(keyword) 顯示該用戶(hù)目錄下的所有文件管理信息 1 1 創(chuàng)建文件 刪除文件 打開(kāi)文件 讀文件 寫(xiě)文件 改變權(quán)限 顯示文件 保存當(dāng)前主目錄 刪除用戶(hù) 返回主界面 輸入命令 5)源程序: #include #

7、include #include #include #include "conio.h" #include #define NULL 0 #define keynum 10 #define getspace(type) (type*)malloc(sizeof(type)) char cmd[64]; //存放用戶(hù)輸入命令 char buffer[36];// char user[32];//存放當(dāng)前登陸的用戶(hù)名 typedef char ALFA[12]; ALFA KWORD[keyn

8、um]; struct UFD{//用戶(hù)文件管理模塊 char filename[32]; //文件名 int safecode; //文件保護(hù)碼 long length; //文件長(zhǎng)度 }*curfile = NULL; struct MFD{//用戶(hù)登陸信息管理模塊 char username[32]; //用戶(hù)名 bool filepoint; //用戶(hù)目錄下的文件指針,false表示目錄為空 }*curuser = NULL,*elseuser=NULL; typedef UFD UFD; typedef MFD MFD;

9、 void main(); void KeyWord()//初始化命令關(guān)鍵字 { strcpy(KWORD[ 1],"bye"); strcpy(KWORD[ 2],"chmod"); strcpy(KWORD[ 3],"close"); strcpy(KWORD[ 4],"create"); strcpy(KWORD[ 5],"delete"); strcpy(KWORD[ 6],"list"); strcpy(KWORD[ 7],"open"); strcpy(KWORD[ 8],"read"); strcpy(KWORD[ 9],"w

10、rite"); } int LoginDisplay() //登陸選項(xiàng)操作函數(shù) { int SELETE_1 = 0; do { cout<<" *****請(qǐng)選擇操作*****\n1、用戶(hù)登陸 2、用戶(hù)注冊(cè) 0、退出"<>SELETE_1; }while(SELETE_1<0 || SELETE_1>2); system("cls"); return SELETE_1; } bool Login(int SELETE)//用戶(hù)登陸,注冊(cè)函數(shù) { FILE *fp,*fp1,*fp2;

11、 char name[12]; switch(SELETE) { case 1://用戶(hù)登陸 if((fp = fopen("LOGIN.exe","rb")) == NULL)//打開(kāi)用戶(hù)注冊(cè)目錄管理文件 { cout<<"\n錯(cuò)誤:不能打開(kāi)登陸文件。"<>name; //輸入用戶(hù)登陸名 while(

12、!feof(fp)) //檢查該用戶(hù)是否合法 { fread(curuser,sizeof(MFD),1,fp); if(strcmp(curuser->username,name)==0) break; } if(feof(fp)) //如果沒(méi)有找到跟當(dāng)前登陸用戶(hù)名相同的管理信息,提示出錯(cuò) { cout<<"\n錯(cuò)誤:該用戶(hù)不存在。"<

13、true; } break; case 2: //新用戶(hù)注冊(cè) if((fp=fopen("LOGIN.exe","ab"))==NULL)//如果登陸信息管理文件不存在 fp=fopen("LOGIN.exe","wb+"); //創(chuàng)建該信息管理文件 char name[12]; curuser = getspace(MFD); while(1) { cout<<"\n *****新用戶(hù)注冊(cè)*****"<>name; /

14、/輸入用戶(hù)注冊(cè)名 fp1 = fopen("LOGIN.exe","rb"); while(!feof(fp1))//查看該用戶(hù)名是否被別的用戶(hù)占用 { fread(curuser,sizeof(MFD),1,fp1); if(strcmp(curuser->username,name) == 0)//該名稱(chēng)已經(jīng)被使用 { cout<<"\n該用戶(hù)已經(jīng)存在,請(qǐng)重新輸入!"<

15、 { strcpy(curuser->username,name); curuser->filepoint = NULL; fwrite(curuser,sizeof(MFD),1,fp); strcpy(user,curuser->username);//生成用戶(hù)文件管理模塊 strcat(user,".exe"); //用于管理用戶(hù)目錄下的各個(gè)文件 fp2=fopen(user,"wb+"); fclose(fp2); cout<<"\n注冊(cè)

16、成功!"<username<

17、 break; default: return false; break; } } void DisplayUFD()//打印用戶(hù)信息,包括用戶(hù)的各個(gè)文件 //名稱(chēng)、長(zhǎng)度和操作權(quán)限的設(shè)置信息 { if(curuser->filepoint == false)//當(dāng)前用戶(hù)目錄下沒(méi)有任何文件存在 cout<<"\n用戶(hù) "<username<<" 文件夾是空的"<

18、2]; strcpy(filename,curuser->username); strcat(filename,".exe"); if((fp=fopen(filename,"rb"))==NULL)//打開(kāi)用戶(hù)文件信息管理模塊 { cout<<"\n無(wú)法打開(kāi)用戶(hù):"<username<<" 的文件!"<username<<"目錄下的文件:"<

19、 UFD *ufd; int i=0; ufd = getspace(UFD); //申請(qǐng)存放用戶(hù)文件模塊的空間 while(1) { fread(ufd,sizeof(UFD),1,fp); if(feof(fp))//全部輸出完畢,結(jié)束 break; else//打印信息 cout<filename<<"\t"<length<<"\t"<safecode<

20、File(bool BOOL)//注銷(xiāo)函數(shù),調(diào)用次函數(shù)用戶(hù)可以退出系統(tǒng) { FILE *infile,*outfile; char out[50]; strcpy(out,"outfilelocate.exe"); if((infile=fopen("LOGIN.exe","rb"))==NULL) { cout<<"\n保存錯(cuò)誤。"; // fclose(infile); return; } else { if((outfile=fopen(out,"wb+"))==NULL)//申請(qǐng)一個(gè)緩沖區(qū)管理模塊 //存放用戶(hù)更新后的全部信息

21、 { cout<<"\n保存錯(cuò)誤。";// fclose(outfile); fclose(infile);return; } else { MFD *mfd = getspace(MFD); while(1) {//將舊文件管理信息讀出,并保存到新的文件信息管理模塊中 fread(mfd,sizeof(MFD),1,infile); if(feof(infile)) break; if((strcmp(mfd->username,curuser->username))==0)

22、{ if(BOOL)//更新當(dāng)前用戶(hù)信息的操作 fwrite(curuser,sizeof(MFD),1,outfile); else continue;//如果用戶(hù)想把自己的注冊(cè)目錄從系統(tǒng)中徹底刪除 //則執(zhí)行該操作 } else fwrite(mfd,sizeof(MFD),1,outfile);//寫(xiě)入新的模塊 } fclose(infile);fclose(outfile); remove("LOGIN.exe");//將舊的該用戶(hù)的文件管理模塊刪除 rename(out,

23、"LOGIN.exe");//將新的用戶(hù)的文件管理模塊重命名為用戶(hù)目錄下的管理模塊 } } system("cls"); main(); } bool ClearUserFile()//用戶(hù)要將自己的注冊(cè)目錄從系統(tǒng)徹底刪除 //首先將該用戶(hù)目錄下的全部文件刪除 { FILE *fp; char file[50]; strcpy(file,curuser->username); strcat(file,".exe"); if((fp=fopen(file,"rb"))==NULL) //打開(kāi)用戶(hù)文件信息管理模塊 { // fclose

24、(fp); cout<<"\n操作失敗。";return true; } else {//將該用戶(hù)目錄下的文件逐個(gè)從磁盤(pán)刪除 UFD *ufd = getspace(UFD); while(1) { fread(ufd,sizeof(UFD),1,fp); if(feof(fp)) break; else remove(ufd->filename);//刪除文件 } fclose(fp); return true; } } void ClearUserMes()//刪除用戶(hù)全部信息

25、{ char name[50]; strcpy(name,curuser->username); strcat(name,".exe"); remove(name); //從磁盤(pán)中刪除用戶(hù)文件信息管理模塊 ByeFile(false);//更新系統(tǒng)的用戶(hù)登陸信息管理模塊 } void DeleteUser()//刪除用戶(hù)注冊(cè)目錄的操作 { char ch; cout<<"\n該操作將會(huì)是你在系統(tǒng)所有信息刪除,下次登陸時(shí)你必須重新申請(qǐng)用戶(hù)名!"<>ch;

26、 switch(ch)//提示用戶(hù)確認(rèn)刪除 { case Y: case y: if(ClearUserFile())//如果用戶(hù)的全部文件已經(jīng)刪除了 //則可以將該用戶(hù)的文件信息管理模塊也從磁盤(pán)中刪除 //以免在沒(méi)完全刪除文件卻刪了該文件信息管理模塊 //使得這些文件無(wú)法再進(jìn)行管理造成磁盤(pán)空間的浪費(fèi) ClearUserMes();//刪除文件信息管理模塊 break; default: cout<<"\n你取消了此操作!"; break; } } void CreatFile()//在當(dāng)前用戶(hù)目錄下創(chuàng)建文件

27、 { FILE *fp; curuser->filepoint=true; if((fp=fopen(buffer,"r"))==NULL)//如果沒(méi)有跟用戶(hù)輸入文件名相同的文件 { if((fp=fopen(buffer,"w"))==NULL) { cout<<"\n創(chuàng)建文件失??!"; // fclose(fp); return; } fclose(fp); } else {//用戶(hù)要?jiǎng)?chuàng)建的文件已經(jīng)存在 cout<<"\n該文件已經(jīng)存在,創(chuàng)建另一個(gè)文件?Y/N"; char c

28、h; cin>>ch; switch(ch) { case Y: case y: cout<<"\n輸入新文件名:"; cin>>buffer; strcat(buffer,".txt"); fclose(fp); if((fp=fopen(buffer,"w"))==NULL) { cout<<"\n創(chuàng)建文件失?。?; // fclose(fp); return; } fclose(fp); break;

29、 default: fclose(fp); return; } } strcpy(user,curuser->username); strcat(user,".exe"); curfile = getspace(UFD); strcpy(curfile->filename,buffer);//文件名 curfile->length=0; //該文件長(zhǎng)度為零 curfile->safecode=30; //設(shè)置該文件的默認(rèn)權(quán)限 //11 00,文件主有讀和寫(xiě)權(quán),其他用戶(hù)沒(méi)有讀寫(xiě)權(quán) if((fp=fopen(user,"ab"))=

30、=NULL) { cout<<"\n錯(cuò)誤:你可能不是合法用戶(hù)。"<filename<<" 創(chuàng)建成功!"; } fclose(fp); } void DeleteFile()//刪除當(dāng)前目錄下一個(gè)文件的操作 { char ch; FILE *infile,*outfile; cout<<"\n確定要?jiǎng)h除文件:"<

31、er<<" Y/N"<>ch;//提示用戶(hù)確認(rèn)刪除 switch(ch) { case Y: case y://更新用戶(hù)文件信息管理模塊,這里同樣使用緩沖區(qū)模塊來(lái)更新 //方法與上面將到的類(lèi)似 char out[50],in[50]; strcpy(out,"outfilelocate.exe"); strcpy(in,curuser->username); strcat(in,".exe"); if((infile=fopen(in,"rb"))==NULL)//打開(kāi)該用

32、戶(hù)的文件信息管理模塊 { cout<<"\n保存錯(cuò)誤。"; //fclose(infile); return; } else { if((outfile=fopen(out,"wb+"))==NULL) { cout<<"\n保存錯(cuò)誤。";// fclose(outfile); fclose(infile);return; } else { UFD *u

33、fd = getspace(UFD); while(1) { fread(ufd,sizeof(UFD),1,infile);//從舊模塊讀出信息 if(feof(infile)) break; if((strcmp(ufd->filename,buffer))==0)//要進(jìn)行更新的信息 continue; else fwrite(ufd,sizeof(UFD),1,outfile)

34、;//寫(xiě)入新模塊 } fclose(infile);fclose(outfile); remove(in);//在磁盤(pán)移除就模塊 rename(out,in); //新模塊命名為當(dāng)前用戶(hù)文件信息管理模塊 } } remove(buffer);//從磁盤(pán)中刪除該文件 break; default: break; } } void ListAllFile()//顯示當(dāng)前用戶(hù)目錄下的文件信息 { DisplayUFD(); } void OpenFi

35、le()//在window模式下打開(kāi)該文件 { system(buffer);//buffer為文件名,如:file1.txt } bool QueryModElse(bool BOOL,bool &flag)//查詢(xún)其它用戶(hù)目錄下文件的文件 //當(dāng)該文件的權(quán)限允許當(dāng)前用戶(hù)對(duì)其執(zhí)行有關(guān)操作時(shí),返回ture { FILE *fp; char user[50]; UFD *ufd = getspace(UFD);//elseuser表示除當(dāng)前用戶(hù)外的所有用戶(hù)注冊(cè)目錄 strcpy(user,elseuser->username); strcat(user,".

36、exe"); if((fp=fopen(user,"rb"))==NULL){//打開(kāi)一個(gè)其它的用戶(hù)文件信息管理模塊 // fclose(fp); cout<<"\n操作出現(xiàn)錯(cuò)誤,對(duì)此我們表示歉意!";return false; } else{ while(1){ fread(ufd,sizeof(UFD),1,fp); if(feof(fp)){ fclose(fp);return false; } if(strcmp(ufd->filename,buffer)==0){ if(BOOL)//該用戶(hù)請(qǐng)求寫(xiě)該文件

37、 { if(ufd->safecode== 31 || ufd->safecode== 33) //1101、1111最后一位為1,有寫(xiě)權(quán) return true; else{ cout<<"\n你無(wú)權(quán)對(duì)文件 "<

38、fd->safecode == 32 || ufd->safecode == 33) //1110、1111倒數(shù)第二位為1,有讀權(quán) return true; else{ cout<<"\n你無(wú)權(quán)對(duì)文件 "<

39、E *fp,*fp1; bool flag=false; char user[50]; UFD *ufd = getspace(UFD); strcpy(user,curuser->username); strcat(user,".exe"); if((fp=fopen(user,"rb"))==NULL){//打開(kāi)用戶(hù)文件信息管理模塊 // fclose(fp); cout<<"\n操作出現(xiàn)錯(cuò)誤,對(duì)此我們表示歉意!";return false; } else{//查找匹配的文件名,用戶(hù)目錄下的文件允許用戶(hù)進(jìn)行讀寫(xiě)操作 while(1){

40、 fread(ufd,sizeof(UFD),1,fp); if(feof(fp)){//在當(dāng)前用戶(hù)文件管理模塊中找不到匹配文件 //則繼續(xù)在其它用戶(hù)注冊(cè)目錄下查找 fclose(fp); fp1=fopen("LOGIN.exe","rb"); elseuser = getspace(MFD); bool BOOL_1=false; while(1){ fread(elseuser,sizeof(MFD),1,fp1);//讀其它用戶(hù)信息 if(feof(fp1) && !BOOL_1)

41、//全部用戶(hù)都查找完 //但仍然沒(méi)找到匹配的文件 return false; if(elseuser != curuser){ if((BOOL_1=QueryModElse(BOOL,flag)))//查找 return true; if(flag) return false; } } } if(strcmp(ufd->filename,buffer)==0){//在當(dāng)前用戶(hù)注冊(cè)目錄下 //找到該文件,返回真值 fclo

42、se(fp);return true; } } } } bool WriteRight(int len,bool BOOL)//查看是否已經(jīng)正確地寫(xiě)入到該文件信息中 //是則返回真值 { char user[50],outfile[50]; FILE *fp,*fp1; strcpy(user,elseuser->username); strcat(user,".exe"); if((fp=fopen(user,"rb"))==NULL){ return false; } else{ UFD *ufd = getsp

43、ace(UFD); while(1){//在此用戶(hù)目錄下查找匹配文件 fread(ufd,sizeof(UFD),1,fp); if(feof(fp)){ fclose(fp);return false; } if((strcmp(ufd->filename,buffer))==0){//找到要寫(xiě)入新的長(zhǎng)度的文件 strcpy(outfile,"outfilelocate.exe"); if((fp1=fopen(outfile,"wb+"))==NULL){ cout<<"\n錯(cuò)誤:寫(xiě)入文件長(zhǎng)度出錯(cuò)_

44、3。"; // fclose(fp1); fclose(fp);return false; } else{ fclose(fp); fp=fopen(user,"rb");//文件指針從新指向此用戶(hù)文件信息管理模塊開(kāi)頭 while(1){ fread(ufd,sizeof(UFD),1,fp); if(feof(fp)) break; if(strcmp(ufd->filename,buffer)==0){//找到匹配的文件 if(BOOL) uf

45、d->length+=len; //在文件末追加內(nèi)容的操作 else ufd->length =len; //覆蓋原文件內(nèi)容 } fwrite(ufd,sizeof(UFD),1,fp1); } fclose(fp);fclose(fp1); remove(user); rename(outfile,user); return true; } } } } } void WriteLengthToFile(int Len,bool BOOL)//將文件長(zhǎng)

46、度寫(xiě)入文件管理模塊中 {//因?yàn)楫?dāng)前用戶(hù)可以對(duì)其它用戶(hù)的文件進(jìn)行操作(只要權(quán)限允許) //所以應(yīng)該在整個(gè)文件系統(tǒng)目錄下查找該文件的位置 FILE *fp; if((fp=fopen("LOGIN.exe","rb"))==NULL){//不能打開(kāi)文件 cout<<"\n寫(xiě)入文件長(zhǎng)度錯(cuò)誤_1!"; // fclose(fp); return; } else{ elseuser = getspace(MFD); while(1){ fread(elseuser,sizeof(MFD),1,fp); if(feof(fp))

47、 break; else{ if(WriteRight(Len,BOOL)){//查看是否已經(jīng)正確地寫(xiě)入到該文件信息中 fclose(fp);return; } } } cout<<"\n寫(xiě)入文件長(zhǎng)度錯(cuò)誤_2!"; fclose(fp);return; } } void WriteFile()//向文件寫(xiě)入信息的操作 { if(!QueryMod(true))//查詢(xún)當(dāng)前用戶(hù)對(duì)該文件是否有寫(xiě)權(quán) return;//對(duì)該文件沒(méi)有寫(xiě)權(quán)則返回 char ch; int i=0; FILE *fp;

48、 if((fp=fopen(buffer,"r"))==NULL)//查詢(xún)?cè)撐募欠翊嬖? { cout<<"\n該文件不存在,請(qǐng)創(chuàng)建該文件后再寫(xiě)入。"; // fclose(fp); return; } fclose(fp); cout<<"\n請(qǐng)選擇寫(xiě)入方式:"<>ch; cout<<"開(kāi)始輸入正文:"<

49、))==NULL) cout<<"\n文件打開(kāi)失敗。"; else { ch=getchar(); while(ch!=#)//將新的文件內(nèi)容寫(xiě)入到文件的磁盤(pán)位置中 { i++; fputc(ch,fp); ch=getchar(); } } fclose(fp); WriteLengthToFile(i,false);//將文件長(zhǎng)度寫(xiě)入文件管理模塊 break; case 2: if((fp=fopen(buffer,"a"))==NULL) cout<<"\n文件打開(kāi)

50、失敗。"; else { ch=getchar(); while(ch!=#)//將新的文件內(nèi)容寫(xiě)入到文件的磁盤(pán)位置中 { i++; fputc(ch,fp); ch=getchar(); } } fclose(fp); WriteLengthToFile(i,true);//將文件長(zhǎng)度寫(xiě)入文件管理模塊 break; default: break; } } void ReadFile()//讀文件函數(shù) { if(!QueryMod(false))//查詢(xún)當(dāng)前用戶(hù)是否有權(quán)

51、讀該文件 return;//沒(méi)有讀權(quán),則返回 FILE *fp; if((fp=fopen(buffer,"r"))==NULL)//打開(kāi)該文件 { cout<

52、angeMod()//修改某文件的執(zhí)行權(quán)限 { int mod=40; FILE *fp,*infile,*outfile; char in[50],out[50]; UFD *ufd = getspace(UFD); strcpy(in,curuser->username); strcat(in,".exe"); strcpy(out,"outfilelocate.exe"); if((fp=fopen(in,"rb"))==NULL){ // fclose(fp); cout<<"\n操作出現(xiàn)錯(cuò)誤,對(duì)此我們表示歉意!";return;

53、 } else{ while(1){//查看該文件是否在當(dāng)前用戶(hù)的注冊(cè)目錄下 //任何用戶(hù)無(wú)權(quán)修改不是自己目錄下的文件的權(quán)限值 fread(ufd,sizeof(UFD),1,fp); if(feof(fp)){//在當(dāng)前目錄下找不到該文件,說(shuō)明該用戶(hù)無(wú)權(quán)修改該文件權(quán)限 cout<<"\n你沒(méi)有權(quán)限對(duì)文件 "<filename,buffer)==0){//找到該文件,繼續(xù)操作 fclose(fp);br

54、eak; } } } bool flag1=true; while(flag1) { cout<<"\n輸入文件 "<>mod;//輸入權(quán)限值 if(mod<30 || mod>33) {//確保輸入的權(quán)限值正確 cout<<"\n錯(cuò)誤:權(quán)限值必須在30~33之間"; continue; } else{ char ch; switch(mod){//告訴用戶(hù)對(duì)該文件權(quán)限修改的結(jié)果,以便用戶(hù)確認(rèn) case 30: cou

55、t<<"\n當(dāng)前權(quán)限設(shè)置:其他用戶(hù)對(duì)"<

56、} cout<<"\n確認(rèn)按Y,取消按N:"; cin>>ch; switch(ch){ case Y: case y:flag1=false;break; default: flag1=true; } } } //更新文件信息管理模塊,相關(guān)操作類(lèi)似上面,不在贅述 if((infile=fopen(in,"rb"))==NULL){ cout<<"\n操作出現(xiàn)錯(cuò)誤,對(duì)此我們表示歉意!";fclose(infile); return; } else{ if((outfile=fopen(out,"

57、wb+"))==NULL){ cout<<"\n操作出現(xiàn)錯(cuò)誤,對(duì)此我們表示歉意!"; fclose(infile);//fclose(outfile); return; } else{ while(1) { fread(ufd,sizeof(UFD),1,infile); if(feof(infile)) break; if((strcmp(ufd->filename,buffer))==0) ufd->safecode=mod;

58、 fwrite(ufd,sizeof(UFD),1,outfile); } fclose(infile);fclose(outfile); remove(in); rename(out,in); } } } void Execute(int i,int len,int cmdset)//執(zhí)行命令函數(shù) { int j=0; for(;i||cmd[i]== ) break; buffer[j]=cmd[i];j++; } buf

59、fer[j]=\0; strcat(buffer,".txt"); switch(cmdset) { case 1: //退出 ByeFile(true); break; case 2: //改變文件操作權(quán)限 if((strcmp(buffer,".txt"))==0){ cout<<"\n輸入命令出錯(cuò)!"; return; } ChangeMod(); break; case 3: //刪除用戶(hù) DeleteUser(); break; case 4: //創(chuàng)建文件 if((strc

60、mp(buffer,".txt"))==0){ cout<<"\n輸入命令出錯(cuò)!"; return; } CreatFile(); break; case 5: //刪除文件 if((strcmp(buffer,".txt"))==0){ cout<<"\n輸入命令出錯(cuò)!"; return; } DeleteFile(); break; case 6: //列出該用戶(hù)所有文件清單 ListAllFile(); break; case 7: //打開(kāi)文件 if((strcmp(buffer,"

61、.txt"))==0){ cout<<"\n輸入命令出錯(cuò)!"; return; } OpenFile(); break; case 8: //讀文件 if((strcmp(buffer,".txt"))==0){ cout<<"\n輸入命令出錯(cuò)!"; return; } ReadFile(); break; case 9: //寫(xiě)文件 if((strcmp(buffer,".txt"))==0){ cout<<"\n輸入命令出錯(cuò)!"; return; } WriteFile();

62、 break; default: break; } } void Command()//讀取用戶(hù)輸入的命令,并將其轉(zhuǎn)換成系統(tǒng)能識(shí)別的命令 { int len = 0,i,j; int cmdset; while(1) { cmdset = 0; cout<<"\nrun\\"; cin>>cmd; len = strlen(cmd); i=0;j=0; while(cmd[i]==>||cmd[i]== ){i++;}//過(guò)濾空格鍵和> for(;i

63、i]==> || cmd[i]== || i==len-1) { if(cmd[i]==> || cmd[i]== ) buffer[j] = \0; else if(i==len-1) { buffer[j]=cmd[i]; buffer[j+1]=\0; } i++; j=0; int low=1,mid,high=keynum-1; bool BOOL = false; while(low<=high){

64、//找到該命令關(guān)鍵字的內(nèi)部識(shí)別碼 mid=(low+high)/2; if (strcmp(buffer,KWORD[mid])<=0) high=mid-1; if (strcmp(buffer,KWORD[mid])>=0) low=mid+1; if(strcmp(buffer,KWORD[mid])==0){ BOOL = true; break; } } if(!BOOL) { cout<<"\n"<

65、<"不是系統(tǒng)定義的命令..."; cmdset = 0; break; } else {cmdset = mid;break;} } else{ buffer[j] = cmd[i]; j++; } } if(cmdset == 0) continue; while(cmd[i]==>||cmd[i]== ){i++;}//過(guò)濾空格鍵和> buffer[0]=\0; Execute(i,len,cmdset); //執(zhí)行該命令 } } void main() {

66、 while(1){ int SELETE = LoginDisplay(); if(SELETE==0) exit(0); bool BOOL = Login(SELETE);//用戶(hù)登陸,或者注冊(cè)函數(shù) if(BOOL) { KeyWord(); //初始化命令關(guān)鍵字 DisplayUFD();//打印用戶(hù)目錄下的文件 Command(); //命令行操作 } } } 五.調(diào)試結(jié)果: 1)系統(tǒng)界面如下: 2)創(chuàng)建新用戶(hù):如果你以前還沒(méi)有注冊(cè),則可以先選擇2,創(chuàng)建一個(gè)用戶(hù). 3)創(chuàng)建用戶(hù)后,可以用create>xiao命令建立一個(gè)名為xiao的text文件.并可以用list查看文件的信息(xiao.txt是文件名,0表示文件當(dāng)前的長(zhǎng)度為0,30用二進(jìn)制表示為1100,表示當(dāng)前用戶(hù)有讀

展開(kāi)閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!