文件系统实验报告Word文档下载推荐.docx
《文件系统实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《文件系统实验报告Word文档下载推荐.docx(33页珍藏版)》请在冰豆网上搜索。
run\delete>
返回命令行。
5、list-显示当前注册目录下的所有文件信息,包括文件名、文件长度、文件操作权限。
run\list↙。
6、chmod-改变某个文件的执行权限,但前提是该文件是该用户目录下的文件。
run\chmod>
7、open-在window界面下打开某个文件。
命令格:
run\open>
执行该命令后,文件file1将用在windows界面下的文件形式打开。
用户可以在这个方式中对文件进行修改,并将修改后的容保存。
8、read-读文件信息。
将文件信息读入并显示在终端。
run\read>
9、write-向某个文件写入新的信息。
用户可以选择用覆盖原来容的方式和在文件的末尾插入新信息的方式写入信息。
2)_系统采用二级文件目录。
设置主目录(MFD)和用户文件目录(UFD),分别以文件的方式保存在磁盘中。
在主目录中又注册用户的用户名和另一标志该用户目录下是否有文件的指针标记。
用户文件目录用用户名作为文件名保存在磁盘,以便检索时方便对应。
在用户文件目录中保存着该目录下所有的文件的文件名称、保护码、文件长度。
3)该系统大量使用高级语言中的文件操作函数,所以能实际看到文件的创建写入、读出、删除等效果。
4)实验流程图
1
创建文件
删除文件
打开文件
读文件
写文件
改变权限
显示文件
保存当前主目录
删除用户
返回主界面
输入命令
5)源程序:
#include<
iostream.h>
#include<
stdio.h>
stdlib.h>
string.h>
#include"
conio.h"
dos.h>
#defineNULL0
#definekeynum10
#definegetspace(type)(type*)malloc(sizeof(type))
charcmd[64];
//存放用户输入命令
charbuffer[36];
//
charuser[32];
//存放当前登陆的用户名
typedefcharALFA[12];
ALFAKWORD[keynum];
structUFD{//用户文件管理模块
charfilename[32];
//文件名
intsafecode;
//文件保护码
longlength;
//文件长度
}*curfile=NULL;
structMFD{//用户登陆信息管理模块
charusername[32];
//用户名
boolfilepoint;
//用户目录下的文件指针,false表示目录为空
}*curuser=NULL,*elseuser=NULL;
typedefUFDUFD;
typedefMFDMFD;
voidmain();
voidKeyWord()//初始化命令关键字
{
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],"
write"
}
intLoginDisplay()//登陆选项操作函数
intSELETE_1=0;
do
{
cout<
<
"
*****请选择操作*****\n1、用户登陆2、用户注册0、退出"
endl;
cin>
>
SELETE_1;
}while(SELETE_1<
0||SELETE_1>
2);
system("
cls"
returnSELETE_1;
boolLogin(intSELETE)//用户登陆,注册函数
FILE*fp,*fp1,*fp2;
charname[12];
switch(SELETE)
case1:
//用户登陆
if((fp=fopen("
LOGIN.exe"
"
rb"
))==NULL)//打开用户注册目录管理文件
{
cout<
\n错误:
不能打开登陆文件。
getch();
system("
returnfalse;
}
curuser=getspace(MFD);
cout<
\n*****登陆*****\n用户名:
;
name;
//输入用户登陆名
while(!
feof(fp))//检查该用户是否合法
fread(curuser,sizeof(MFD),1,fp);
if(strcmp(curuser->
username,name)==0)
break;
if(feof(fp))//如果没有找到跟当前登陆用户名相同的管理信息,提示出错
该用户不存在。
fclose(fp);
returnfalse;
else
fclose(fp);
returntrue;
break;
case2:
//新用户注册
if((fp=fopen("
ab"
))==NULL)//如果登陆信息管理文件不存在
fp=fopen("
wb+"
//创建该信息管理文件
charname[12];
while
(1)
\n*****新用户注册*****"
用户名:
cin>
//输入用户注册名
fp1=fopen("
while(!
feof(fp1))//查看该用户名是否被别的用户占用
{
fread(curuser,sizeof(MFD),1,fp1);
if(strcmp(curuser->
username,name)==0)//该名称已经被使用
{
cout<
\n该用户已经存在,请重新输入!
getch();
break;
}
}
if(feof(fp1))//该名称没有被别的用户占用
strcpy(curuser->
username,name);
curuser->
filepoint=NULL;
fwrite(curuser,sizeof(MFD),1,fp);
strcpy(user,curuser->
username);
//生成用户文件管理模块
strcat(user,"
.exe"
//用于管理用户目录下的各个文件
fp2=fopen(user,"
fclose(fp2);
cout<
\n注册成功!
//提示注册成功
fclose(fp1);
fp=fopen("
//显示当前注册用户的名称
if(feof(fp))
curuser->
username<
returntrue;
default:
}
voidDisplayUFD()//打印用户信息,包括用户的各个文件
//名称、长度和操作权限的设置信息
if(curuser->
filepoint==false)//当前用户目录下没有任何文件存在
\n用户"
文件夹是空的"
else
{//存在文件,将所有文件信息打印在终端
FILE*fp;
charfilename[12];
strcpy(filename,curuser->
strcat(filename,"
if((fp=fopen(filename,"
))==NULL)//打开用户文件信息管理模块
\n无法打开用户:
的文件!
return;
{//读入并将用户全部文件信息打印在终端
用户:
目录下的文件:
UFD*ufd;
inti=0;
ufd=getspace(UFD);
//申请存放用户文件模块的空间
while
(1)
{
fread(ufd,sizeof(UFD),1,fp);
if(feof(fp))//全部输出完毕,结束
else//打印信息
ufd->
filename<
\t"
length<
safecode<
voidByeFile(boolBOOL)//注销函数,调用次函数用户可以退出系统
FILE*infile,*outfile;
charout[50];
strcpy(out,"
outfilelocate.exe"
if((infile=fopen("
))==NULL)
\n保存错误。
//fclose(infile);
return;
if((outfile=fopen(out,"
))==NULL)//申请一个缓冲区管理模块
//存放用户更新后的全部信息
//fclose(outfile);
fclose(infile);
return;
MFD*mfd=getspace(MFD);
{//将旧文件管理信息读出,并保存到新的文件信息管理模块中
fread(mfd,sizeof(MFD),1,infile);
if(feof(infile))
if((strcmp(mfd->
username,curuser->
username))==0)
if(BOOL)//更新当前用户信息的操作
fwrite(curuser,sizeof(MFD),1,outfile);
elsecontinue;
//如果用户想把自己的注册目录从系统中彻底删除
//则执行该操作
else
fwrite(mfd,sizeof(MFD),1,outfile);
//写入新的模块
fclose(outfile);
remove("
//将旧的该用户的文件管理模块删除
rename(out,"
//将新的用户的文件管理模块重命名为用户目录下的管理模块
}
main();
boolClearUserFile()//用户要将自己的注册目录从系统彻底删除
//首先将该用户目录下的全部文件删除
FILE*fp;
charfile[50];
strcpy(file,curuser->
strcat(file,"
if((fp=fopen(file,"
))==NULL)//打开用户文件信息管理模块
//fclose(fp);
\n操作失败。
returntrue;
{//将该用户目录下的文件逐个从磁盘删除
UFD*ufd=getspace(UFD);
fread(ufd,sizeof(UFD),1,fp);
else
remove(ufd->
filename);
//删除文件
voidClearUserMes()//删除用户全部信息
charname[50];
strcpy(name,curuser->
strcat(name,"
remove(name);
//从磁盘中删除用户文件信息管理模块
ByeFile(false);
//更新系统的用户登陆信息管理模块
voidDeleteUser()//删除用户注册目录的操作
charch;
cout<
\n该操作将会是你在系统所有信息删除,下次登陆时你必须重新申请用户名!
\n你确定要删除你在系统中的注册信息吗?
Y/N"
cin>
ch;
switch(ch)//提示用户确认删除
case'
Y'
:
y'
if(ClearUserFile())//如果用户的全部文件已经删除了
//则可以将该用户的文件信息管理模块也从磁盘中删除
//以免在没完全删除文件却删了该文件信息管理模块
//使得这些文件无法再进行管理造成磁盘空间的浪费
ClearUserMes();
//删除文件信息管理模块
\n你取消了此操作!
voidCreatFile()//在当前用户目录下创建文件
curuser->
filepoint=true;
if((fp=fopen(buffer,"
r"
))==NULL)//如果没有跟用户输入文件名相同的文件
if((fp=fopen(buffer,"
w"
\n创建文件失败!
//fclose(fp);
{//用户要创建的文件已经存在
\n该文件已经存在,创建另一个文件?
charch;
switch(ch)
case'
\n输入新文件名:
buffer;
strcat(buffer,"
.txt"
//fclose(fp);
break;
default:
strcpy(user,curuser->
strcat(user,"
curfile=getspace(UFD);
strcpy(curfile->
filename,buffer);
//文件名
curfile->
length=0;
//该文件长度为零
safecode=30;
//设置该文件的默认权限
//1100,文件主有读和写权,其他用户没有读写权
if((fp=fopen(user,"
你可能不是合法用户。
getch();
fwrite(curfile,sizeof(UFD),1,fp);
//将该文件信息写入用户文件信息管理模块中
\n文件"
curfile->
创建成功!
fclose(fp);
voidDeleteFile()//删除当前目录下一个文件的操作
\n确定要删除文件:
buffer<
Y/N"
//提示用户确认删除
switch(ch)
//更新用户文件信息管理模块,这里同样使用缓冲区模块来更新
//方法与上面将到的类似
charout[50],in[50];
strcpy(out,"
strcpy(in,curuser->
strcat(in,"
if((infile=fopen(in,"
))==NULL)//打开该用户的文件信息管理模块
//fclose(infile);
return;
UFD*ufd=getspace(UFD);
{
fread(ufd,sizeof(UFD),1,infile);
//从旧模块读出信息
if((strcmp(ufd->
filename,buffer))==0)//要进行更新的信息
continue;
fwrite(ufd,sizeof(UFD),1,outfile);
//写入新模块
}
remove(in);
//在磁盘移除就模块
rename(out,in);
//新模块命名为当前用户文件信息管理模块
}
remove(buffer);
//从磁盘中删除该文件
voidListAllFile()//显示当前用户目录下的文件信息
DisplayUFD();
voidOpenFile()//在window模式下打开该文件
system(buffer);
//buffer为文件名,如:
file1.txt
boolQueryModElse(boolBOOL,bool&
flag)//查询其它用户目录下文件的文件
//当该文件的权限允许当前用户对其执行有关操作时,返回ture
charuser[50];
UFD*ufd=getspace(UFD);
//elseuser表示除当前用户外的所有用户注册目录
strcpy(user,elseuser->