操作系统文件管理实验报告.docx
《操作系统文件管理实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统文件管理实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
操作系统文件管理实验报告
操作系统实验报告
实验名称:
文件管理
专业班级:
网络工程1301
学号:
姓名:
2015年6月16日
实验一文件管理
一、实验目的
文件管理是操作系统的一个非常重要的组成部分。
学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。
二、预备知识
1.VS2010的使用
2.C#的学习
3.文件主目录与子目录的理解
三、实验内容与步骤
用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。
要求设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。
系统能够检查打入命令的正确性,出错时能显示出错原因。
对文件必须设置保护措施,例如只能执行,允许读等。
在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。
文件的操作至少有Create、delete、open、close、read、write等命令。
所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。
前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。
另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。
程序流程图:
逻辑设计:
使用线性数组表表示MFD,泛型数组表示UFD,每个元素包括用户ID、保存的文件数、再使用线性表表示文件信息,每个元素包括文件名,文件属性(保护码),文件的状态等信息。
物理设计:
//主目录
privateFileUser[]mfd;
//当前用户
privateFileUsercurrentuser;
///
///文件
///
publicclassFileObject{
publicstringfilename;
publicintsize=20;
publicintread=0;
publicintwrite=0;
publicstringauthor;
}
///
///文件系统用户
///
publicclassFileUser{
publicstringusername;
publicListufd=newList();
publicintfilecount=0;
}
步骤详述:
1、主目录及用户目录机构显示:
2、当前操作用户登录:
3、文件管理系统菜单:
4、create命令:
5、open命令:
6、close命令:
7、delete命令:
8、read命令
9、write命令
10、exit命令
四、实验总结
通过这次的课程设计使我认识到要将操作系统这门计算机专业的课学好不仅仅是要把书上的基本知识学好而且还要不断进行实践,将所学的跟实践操作结合起来才能更好地巩固所学,才能提高自己实践能力.通过这次的设计使我认识到只停留在表面理解问题是很难使问题得到很好的解决的,实践能力与理论知识同样重要。
可以说此课程设计的理论难度并不大,但是若要深入发掘其中的东西,并且实际去编程实现,就遇到了相当大的难度。
因为与之涉及的很多方面并没有学过,需要自己去自学和实践检验。
五、程序清单
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespacefilemanagesystem
{
classProgram
{
staticvoidMain(string[]args)
{
//初始化用户自模拟文件系统
ExplorerInUserexplorer=newExplorerInUser();
}
}
///
///文件管理系统for用户自模拟
///
publicclassExplorerInUser
{
//命令列表
privatestring[]command={"create","open","close","delete","read","write","exit"};
//主目录
privateFileUser[]mfd;
//当前用户
privateFileUsercurrentuser;
///
///构造函数
///
publicExplorerInUser()
{
INI();
}
///
///初始化系统
///
privatevoidINI()
{
if(currentuser==null)
{
//主目录实现
IniUserList();
}
//系那是菜单
InilizeMenu();
boolisinput=false;
//输入正确的命令
while(!
isinput)
{
stringinput=Console.ReadLine();
isinput=CommandGroup(input);
}
}
#region主目录
///
///获取用户个数
///
///
privateintGetUserCount()
{
stringinput=Console.ReadLine();
try
{
intuser_size=Convert.ToInt32(input);
returnuser_size;
}
catch(Exceptione)
{
Console.WriteLine(e.Message);
return0;
}
}
///
///生成用户及用户管理文件
///
privatevoidIniUserList()
{
intuser_size=GetUserCount();
mfd=newFileUser[user_size];
for(inti=0;i{
mfd[i]=newFileUser();
mfd[i].username="mfd_user_"+i;
mfd[i].filecount=3;
Console.WriteLine("mfd:
"+mfd[i].username+","+mfd[i].filecount);
for(intj=0;j<3;j++)
{
FileObjectfile=newFileObject();
file.author=mfd[i].username;
Console.WriteLine("--ufd:
"+file.filename+","+file.size+","+file.author);
file.filename="file"+j;
mfd[i].ufd.Add(file);
}
}
IniLogin();
}
///
///用户登录
///
privatevoidIniLogin()
{
Console.WriteLine("请输入用户名:
");
boolissuccess=false;
while(!
issuccess)
{
stringusername=Console.ReadLine();
for(inti=0;i{
if(mfd[i].username.Equals(username))
{
issuccess=true;
currentuser=mfd[i];
Console.WriteLine("当前用户:
"+username);
break;
}
}
if(!
issuccess)
{
Console.WriteLine("请重新输入输入用户名:
");
}
}
}
#endregion
#region菜单
///
///初始化菜单
///
privatevoidInilizeMenu()
{
Console.WriteLine("欢迎进入文件管理系统!
");
Console.WriteLine("------create-------");
Console.WriteLine("------open---------");
Console.WriteLine("------close--------");
Console.WriteLine("------delete-------");
Console.WriteLine("------read---------");
Console.WriteLine("------write--------");
Console.WriteLine("------exit---------");
Console.WriteLine("请输入操作命令:
");
}
///
///功能分组判断
///
///
///
privateboolCommandGroup(stringcommand)
{
boolisexit=true;
switch(command)
{
case"create":
create();break;
case"open":
open();break;
case"close":
close();break;
case"delete":
delete();break;
case"read":
read();break;
case"write":
write();break;
case"exit":
exit();returntrue;break;
default:
isexit=false;
break;
}
if(isexit){INI();}
else{Console.WriteLine("请重新输入操作命令:
");}
returnisexit;
}
#endregion
#region操作命令方法
///
///创建新的文件
///
privatevoidcreate()
{
Console.WriteLine("请输入新件名:
");
stringfilename=Console.ReadLine();
currentuser.filecount++;
FileObjectfile=newFileObject();
file.filename=filename;
file.author=currentuser.username;
currentuser.ufd.Add(file);
Console.WriteLine("成功创建文件!
");
}
///
///打开指定的文件
///
privatevoidopen(){
Console.WriteLine("请输入文件名:
");
stringfilename=Console.ReadLine();
for(inti=0;i{
if(currentuser.ufd[i].filename.Equals(filename))
{
Console.WriteLine("成功打开文件!
");
Console.WriteLine("ID:
"+i);
Console.WriteLine("FileName:
"+filename);
Console.WriteLine("Size:
"+currentuser.ufd[i].size);
Console.WriteLine("Autor:
"+currentuser.ufd[i].author);
return;
}
}Console.WriteLine("文件不存在!
");
}
///
///关闭所有打开的文件
///
privatevoidclose(){
Console.WriteLine("已关闭文件");
}
///
///删除文件
///
privatevoiddelete()
{
Console.WriteLine("请输入文件名:
");
stringfilename=Console.ReadLine();
for(inti=0;i{
if(currentuser.ufd[i].filename.Equals(filename))
{
currentuser.ufd.RemoveAt(i);
Console.WriteLine("成功删除文件!
");
return;
}
}Console.WriteLine("文件不存在!
");
}
///
///读取文件
///
privatevoidread(){
Console.WriteLine("请输入文件名:
");
stringfilename=Console.ReadLine();
for(inti=0;i{
if(currentuser.ufd[i].filename.Equals(filename))
{
Console.WriteLine("已读取文件!
");
return;
}
}Console.WriteLine("文件不存在!
");
}
///
///写入文件
///
privatevoidwrite(){
Console.WriteLine("请输入文件名:
");
stringfilename=Console.ReadLine();
for(inti=0;i{
if(currentuser.ufd[i].filename.Equals(filename))
{
Console.WriteLine("已写入文件!
");
return;
}
}Console.WriteLine("文件不存在!
");
}
///
///退出系统
///
privatevoidexit(){
Console.WriteLine("您好,您已经成功退出系统!
");
Console.ReadKey();
}
#endregion
}
///
///文件
///
publicclassFileObject{
publicstringfilename;
publicintsize=20;
publicintread=0;
publicintwrite=0;
publicstringauthor;
}
///
///文件系统用户
///
publicclassFileUser{
publicstringusername;
publicListufd=newList();
publicintfilecount=0;
}
}