文件系統(tǒng)實(shí)驗(yàn)報(bào)告
《文件系統(tǒng)實(shí)驗(yàn)報(bào)告》由會(huì)員分享,可在線閱讀,更多相關(guān)《文件系統(tǒng)實(shí)驗(yàn)報(bào)告(26頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 試驗(yàn)四 文件系統(tǒng) 一、 實(shí)驗(yàn)?zāi)康? 1、 用高級(jí)語言編寫和調(diào)試一個(gè)簡(jiǎn)單的文件系統(tǒng),模擬文件管理的工作過程。從而對(duì)各種文件操作命令的實(shí)質(zhì)內(nèi)容和執(zhí)行過程有比較深入的了解。 2、 要求設(shè)計(jì)一個(gè)n個(gè)用戶的文件系統(tǒng),每次用戶可以保存M個(gè)文件。用戶在一次運(yùn)行中只能打開一個(gè)文件,對(duì)文件必須設(shè)置保護(hù)措施,且至少有create、delete、open、close、read、write等命令。 二、 實(shí)驗(yàn)題目: 采用二級(jí)目錄結(jié)構(gòu)實(shí)現(xiàn)磁盤文件操作。 要求: 1.普通文件的目錄項(xiàng)包括文件名,文件類型,文件長(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è)多用戶、多任務(wù)的實(shí)時(shí)操作系統(tǒng)。對(duì)用戶和用戶的文件數(shù)目并沒有上限。也就是說該系統(tǒng)允許任何用戶申請(qǐng)空間,而且在其目錄下的文件數(shù)目并不做任何的限制。 該系統(tǒng)的操作命令如下: ①、 bye-用戶注銷命令。當(dāng)使用該命令時(shí),用戶退出系統(tǒng)。命令格式: run\bye↙系統(tǒng)注銷該用戶并回到登陸界面。 ②、 close-刪除用戶注冊(cè)信息命令。執(zhí)行該命令后,用戶在系統(tǒng)中的所有信息,包括該用戶目錄下的所有文件都被刪除。命令格式:run\close↙.完成后返回登陸界面。 ③、 create-在當(dāng)前目錄下創(chuàng)建一個(gè)文件,且該文件不能跟系統(tǒng)
4、中的文件重名。該文件的管理信息登錄到用戶文件信息管理模塊中。命令格式:run\create>file1↙。其中file1為要?jiǎng)?chuàng)建的文件名稱。執(zhí)行完該命令后回到執(zhí)行命令行。 ④、 delete-刪除當(dāng)前用戶目錄下的一個(gè)文件。命令格式:run\delete>file1↙。返回命令行。 ⑤、 list-顯示當(dāng)前注冊(cè)目錄下的所有文件信息,包括文件名、文件長(zhǎng)度、文件操作權(quán)限。命令格式:run\list↙。 ⑥、 chmod-改變某個(gè)文件的執(zhí)行權(quán)限,但前提是該文件是該用戶目錄下的文件。命令格式:run\chmod>file1↙。 ⑦、 open-在window界面下打開某個(gè)文件。命令格:run\o
5、pen>file1↙。執(zhí)行該命令后,文件file1將用在windows界面下的文件形式打開。用戶可以在這個(gè)方式中對(duì)文件進(jìn)行修改,并將修改后的內(nèi)容保存。 ⑧、 read-讀文件信息。將文件信息讀入并顯示在終端。命令格式:run\read>file1↙。 ⑨、 write-向某個(gè)文件寫入新的信息。用戶可以選擇用覆蓋原來內(nèi)容的方式和在文件的末尾插入新信息的方式寫入信息。 2)_系統(tǒng)采用二級(jí)文件目錄。設(shè)置主目錄(MFD)和用戶文件目錄(UFD),分別以文件的方式保存在磁盤中。在主目錄中又注冊(cè)用戶的用戶名和另一標(biāo)志該用戶目錄下是否有文件的指針標(biāo)記。用戶文件目錄用用戶名作為文件名保存在磁盤,以
6、便檢索時(shí)方便對(duì)應(yīng)。在用戶文件目錄中保存著該目錄下所有的文件的文件名稱、保護(hù)碼、文件長(zhǎng)度。
3) 該系統(tǒng)大量使用高級(jí)語言中的文件操作函數(shù),所以能實(shí)際看到文件的創(chuàng)建寫入、讀出、刪除等效果。
4) 實(shí)驗(yàn)流程圖
開始
選項(xiàng)
用戶登錄
新用戶注冊(cè)
退出程序
結(jié)束
在MFD中找到該用戶?
初始化命令關(guān)鍵字(keyword)
顯示該用戶目錄下的所有文件管理信息
1
1
創(chuàng)建文件
刪除文件
打開文件
讀文件
寫文件
改變權(quán)限
顯示文件
保存當(dāng)前主目錄
刪除用戶
返回主界面
輸入命令
5)源程序:
#include
7、include
8、um]; struct UFD{//用戶文件管理模塊 char filename[32]; //文件名 int safecode; //文件保護(hù)碼 long length; //文件長(zhǎng)度 }*curfile = NULL; struct MFD{//用戶登陸信息管理模塊 char username[32]; //用戶名 bool filepoint; //用戶目錄下的文件指針,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、用戶登陸 2、用戶注冊(cè) 0、退出"<
11、 char name[12];
switch(SELETE)
{
case 1://用戶登陸
if((fp = fopen("LOGIN.exe","rb")) == NULL)//打開用戶注冊(cè)目錄管理文件
{
cout<<"\n錯(cuò)誤:不能打開登陸文件。"<
12、!feof(fp)) //檢查該用戶是否合法
{
fread(curuser,sizeof(MFD),1,fp);
if(strcmp(curuser->username,name)==0)
break;
}
if(feof(fp)) //如果沒有找到跟當(dāng)前登陸用戶名相同的管理信息,提示出錯(cuò)
{
cout<<"\n錯(cuò)誤:該用戶不存在。"< 13、true;
}
break;
case 2: //新用戶注冊(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 *****新用戶注冊(cè)*****"< 14、/輸入用戶注冊(cè)名
fp1 = fopen("LOGIN.exe","rb");
while(!feof(fp1))//查看該用戶名是否被別的用戶占用
{
fread(curuser,sizeof(MFD),1,fp1);
if(strcmp(curuser->username,name) == 0)//該名稱已經(jīng)被使用
{
cout<<"\n該用戶已經(jīng)存在,請(qǐng)重新輸入!"< 15、
{
strcpy(curuser->username,name);
curuser->filepoint = NULL;
fwrite(curuser,sizeof(MFD),1,fp);
strcpy(user,curuser->username);//生成用戶文件管理模塊
strcat(user,".exe"); //用于管理用戶目錄下的各個(gè)文件
fp2=fopen(user,"wb+");
fclose(fp2);
cout<<"\n注冊(cè) 16、成功!"< 17、
break;
default:
return false;
break;
}
}
void DisplayUFD()//打印用戶信息,包括用戶的各個(gè)文件
//名稱、長(zhǎng)度和操作權(quán)限的設(shè)置信息
{
if(curuser->filepoint == false)//當(dāng)前用戶目錄下沒有任何文件存在
cout<<"\n用戶 "< 18、2];
strcpy(filename,curuser->username);
strcat(filename,".exe");
if((fp=fopen(filename,"rb"))==NULL)//打開用戶文件信息管理模塊
{
cout<<"\n無法打開用戶:"< 19、
UFD *ufd;
int i=0;
ufd = getspace(UFD); //申請(qǐng)存放用戶文件模塊的空間
while(1)
{
fread(ufd,sizeof(UFD),1,fp);
if(feof(fp))//全部輸出完畢,結(jié)束
break;
else//打印信息
cout< 20、File(bool BOOL)//注銷函數(shù),調(diào)用次函數(shù)用戶可以退出系統(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ū)管理模塊
//存放用戶更新后的全部信息 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)前用戶信息的操作
fwrite(curuser,sizeof(MFD),1,outfile);
else continue;//如果用戶想把自己的注冊(cè)目錄從系統(tǒng)中徹底刪除
//則執(zhí)行該操作
}
else
fwrite(mfd,sizeof(MFD),1,outfile);//寫入新的模塊
}
fclose(infile);fclose(outfile);
remove("LOGIN.exe");//將舊的該用戶的文件管理模塊刪除
rename(out, 23、"LOGIN.exe");//將新的用戶的文件管理模塊重命名為用戶目錄下的管理模塊
}
}
system("cls");
main();
}
bool ClearUserFile()//用戶要將自己的注冊(cè)目錄從系統(tǒng)徹底刪除
//首先將該用戶目錄下的全部文件刪除
{
FILE *fp;
char file[50];
strcpy(file,curuser->username);
strcat(file,".exe");
if((fp=fopen(file,"rb"))==NULL) //打開用戶文件信息管理模塊
{
// fclose 24、(fp);
cout<<"\n操作失敗。";return true;
}
else
{//將該用戶目錄下的文件逐個(gè)從磁盤刪除
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()//刪除用戶全部信息
25、{
char name[50];
strcpy(name,curuser->username);
strcat(name,".exe");
remove(name); //從磁盤中刪除用戶文件信息管理模塊
ByeFile(false);//更新系統(tǒng)的用戶登陸信息管理模塊
}
void DeleteUser()//刪除用戶注冊(cè)目錄的操作
{
char ch;
cout<<"\n該操作將會(huì)是你在系統(tǒng)所有信息刪除,下次登陸時(shí)你必須重新申請(qǐng)用戶名!"< 26、 switch(ch)//提示用戶確認(rèn)刪除
{
case Y:
case y:
if(ClearUserFile())//如果用戶的全部文件已經(jīng)刪除了
//則可以將該用戶的文件信息管理模塊也從磁盤中刪除
//以免在沒完全刪除文件卻刪了該文件信息管理模塊
//使得這些文件無法再進(jìn)行管理造成磁盤空間的浪費(fèi)
ClearUserMes();//刪除文件信息管理模塊
break;
default:
cout<<"\n你取消了此操作!";
break;
}
}
void CreatFile()//在當(dāng)前用戶目錄下創(chuàng)建文件
27、
{
FILE *fp;
curuser->filepoint=true;
if((fp=fopen(buffer,"r"))==NULL)//如果沒有跟用戶輸入文件名相同的文件
{
if((fp=fopen(buffer,"w"))==NULL)
{
cout<<"\n創(chuàng)建文件失敗!";
// fclose(fp);
return;
}
fclose(fp);
}
else
{//用戶要?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,文件主有讀和寫權(quán),其他用戶沒有讀寫權(quán)
if((fp=fopen(user,"ab"))= 30、=NULL)
{
cout<<"\n錯(cuò)誤:你可能不是合法用戶。"< 31、er<<" Y/N"< 32、戶的文件信息管理模塊
{
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、;//寫入新模塊
}
fclose(infile);fclose(outfile);
remove(in);//在磁盤移除就模塊
rename(out,in); //新模塊命名為當(dāng)前用戶文件信息管理模塊
}
}
remove(buffer);//從磁盤中刪除該文件
break;
default:
break;
}
}
void ListAllFile()//顯示當(dāng)前用戶目錄下的文件信息
{
DisplayUFD();
}
void OpenFi 35、le()//在window模式下打開該文件
{
system(buffer);//buffer為文件名,如:file1.txt
}
bool QueryModElse(bool BOOL,bool &flag)//查詢其它用戶目錄下文件的文件
//當(dāng)該文件的權(quán)限允許當(dāng)前用戶對(duì)其執(zhí)行有關(guān)操作時(shí),返回ture
{
FILE *fp;
char user[50];
UFD *ufd = getspace(UFD);//elseuser表示除當(dāng)前用戶外的所有用戶注冊(cè)目錄
strcpy(user,elseuser->username);
strcat(user,". 36、exe");
if((fp=fopen(user,"rb"))==NULL){//打開一個(gè)其它的用戶文件信息管理模塊
// 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)//該用戶請(qǐng)求寫該文件
37、
{
if(ufd->safecode== 31 || ufd->safecode== 33)
//1101、1111最后一位為1,有寫權(quán)
return true;
else{
cout<<"\n你無權(quán)對(duì)文件 "< 38、fd->safecode == 32 || ufd->safecode == 33)
//1110、1111倒數(shù)第二位為1,有讀權(quán)
return true;
else{
cout<<"\n你無權(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){//打開用戶文件信息管理模塊
// fclose(fp);
cout<<"\n操作出現(xiàn)錯(cuò)誤,對(duì)此我們表示歉意!";return false;
}
else{//查找匹配的文件名,用戶目錄下的文件允許用戶進(jìn)行讀寫操作
while(1){
40、 fread(ufd,sizeof(UFD),1,fp);
if(feof(fp)){//在當(dāng)前用戶文件管理模塊中找不到匹配文件
//則繼續(xù)在其它用戶注冊(cè)目錄下查找
fclose(fp);
fp1=fopen("LOGIN.exe","rb");
elseuser = getspace(MFD);
bool BOOL_1=false;
while(1){
fread(elseuser,sizeof(MFD),1,fp1);//讀其它用戶信息
if(feof(fp1) && !BOOL_1) 41、//全部用戶都查找完
//但仍然沒找到匹配的文件
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)前用戶注冊(cè)目錄下
//找到該文件,返回真值
fclo 42、se(fp);return true;
}
}
}
}
bool WriteRight(int len,bool BOOL)//查看是否已經(jīng)正確地寫入到該文件信息中
//是則返回真值
{
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){//在此用戶目錄下查找匹配文件
fread(ufd,sizeof(UFD),1,fp);
if(feof(fp)){
fclose(fp);return false;
}
if((strcmp(ufd->filename,buffer))==0){//找到要寫入新的長(zhǎng)度的文件
strcpy(outfile,"outfilelocate.exe");
if((fp1=fopen(outfile,"wb+"))==NULL){
cout<<"\n錯(cuò)誤:寫入文件長(zhǎng)度出錯(cuò)_ 44、3。";
// fclose(fp1);
fclose(fp);return false;
}
else{
fclose(fp);
fp=fopen(user,"rb");//文件指針從新指向此用戶文件信息管理模塊開頭
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、度寫入文件管理模塊中
{//因?yàn)楫?dāng)前用戶可以對(duì)其它用戶的文件進(jìn)行操作(只要權(quán)限允許)
//所以應(yīng)該在整個(gè)文件系統(tǒng)目錄下查找該文件的位置
FILE *fp;
if((fp=fopen("LOGIN.exe","rb"))==NULL){//不能打開文件
cout<<"\n寫入文件長(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)正確地寫入到該文件信息中
fclose(fp);return;
}
}
}
cout<<"\n寫入文件長(zhǎng)度錯(cuò)誤_2!";
fclose(fp);return;
}
}
void WriteFile()//向文件寫入信息的操作
{
if(!QueryMod(true))//查詢當(dāng)前用戶對(duì)該文件是否有寫權(quán)
return;//對(duì)該文件沒有寫權(quán)則返回
char ch;
int i=0;
FILE *fp;
48、 if((fp=fopen(buffer,"r"))==NULL)//查詢?cè)撐募欠翊嬖?
{
cout<<"\n該文件不存在,請(qǐng)創(chuàng)建該文件后再寫入。";
// fclose(fp);
return;
}
fclose(fp);
cout<<"\n請(qǐng)選擇寫入方式:"< 49、))==NULL)
cout<<"\n文件打開失敗。";
else
{
ch=getchar();
while(ch!=#)//將新的文件內(nèi)容寫入到文件的磁盤位置中
{
i++;
fputc(ch,fp);
ch=getchar();
}
}
fclose(fp);
WriteLengthToFile(i,false);//將文件長(zhǎng)度寫入文件管理模塊
break;
case 2:
if((fp=fopen(buffer,"a"))==NULL)
cout<<"\n文件打開 50、失敗。";
else
{
ch=getchar();
while(ch!=#)//將新的文件內(nèi)容寫入到文件的磁盤位置中
{
i++;
fputc(ch,fp);
ch=getchar();
}
}
fclose(fp);
WriteLengthToFile(i,true);//將文件長(zhǎng)度寫入文件管理模塊
break;
default:
break;
}
}
void ReadFile()//讀文件函數(shù)
{
if(!QueryMod(false))//查詢當(dāng)前用戶是否有權(quán) 51、讀該文件
return;//沒有讀權(quán),則返回
FILE *fp;
if((fp=fopen(buffer,"r"))==NULL)//打開該文件
{
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)前用戶的注冊(cè)目錄下
//任何用戶無權(quán)修改不是自己目錄下的文件的權(quán)限值
fread(ufd,sizeof(UFD),1,fp);
if(feof(fp)){//在當(dāng)前目錄下找不到該文件,說明該用戶無權(quán)修改該文件權(quán)限
cout<<"\n你沒有權(quán)限對(duì)文件 "< 54、eak;
}
}
}
bool flag1=true;
while(flag1)
{
cout<<"\n輸入文件 "< 55、t<<"\n當(dāng)前權(quán)限設(shè)置:其他用戶對(duì)"< 56、}
cout<<"\n確認(rèn)按Y,取消按N:";
cin>>ch;
switch(ch){
case Y:
case y:flag1=false;break;
default: flag1=true;
}
}
}
//更新文件信息管理模塊,相關(guān)操作類似上面,不在贅述
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 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: //刪除用戶
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: //列出該用戶所有文件清單
ListAllFile();
break;
case 7: //打開文件
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: //寫文件
if((strcmp(buffer,".txt"))==0){
cout<<"\n輸入命令出錯(cuò)!";
return;
}
WriteFile(); 62、
break;
default:
break;
}
}
void Command()//讀取用戶輸入的命令,并將其轉(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++;}//過濾空格鍵和>
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++;}//過濾空格鍵和>
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);//用戶登陸,或者注冊(cè)函數(shù)
if(BOOL)
{
KeyWord(); //初始化命令關(guān)鍵字
DisplayUFD();//打印用戶目錄下的文件
Command(); //命令行操作
}
}
}
五.調(diào)試結(jié)果:
1)系統(tǒng)界面如下:
2)創(chuàng)建新用戶:如果你以前還沒有注冊(cè),則可以先選擇2,創(chuàng)建一個(gè)用戶.
3)創(chuàng)建用戶后,可以用create>xiao命令建立一個(gè)名為xiao的text文件.并可以用list查看文件的信息(xiao.txt是文件名,0表示文件當(dāng)前的長(zhǎng)度為0,30用二進(jìn)制表示為1100,表示當(dāng)前用戶有讀
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運(yùn)動(dòng)會(huì)安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個(gè)人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動(dòng)總結(jié)+在機(jī)關(guān)“弘揚(yáng)憲法精神推動(dòng)發(fā)改工作高質(zhì)量發(fā)展”專題宣講報(bào)告會(huì)上的講話
- 2024年XX村合作社年報(bào)總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊(cè)教研組工作總結(jié)
- 2024年小學(xué)高級(jí)教師年終工作總結(jié)匯報(bào)
- 2024-2025年秋季第一學(xué)期初中物理上冊(cè)教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報(bào)告
- 2025年學(xué)校元旦迎新盛典活動(dòng)策劃方案
- 2024年學(xué)校周邊安全隱患自查報(bào)告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報(bào)告