操作系统实验报告实验名称:文件管理专业班级:网络工程1301学号:姓名:2022年6月16日实验一文件管理一、实验目的文件管理是操作系统的一个非常重要的组成部份。
学生应独立用高级语言编写和调试一个简单的文件系统,摹拟文件管理的工作过程。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。
二、豫备知识1.VS2022的使用2.C#的学习3.文件主目录与子目录的理解三、实验内容与步骤用高级语言编写和调试一个简单的文件系统,摹拟文件管理的工作过程。
要求设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。
系统能够检查打入命令的正确性,出错时能显示出错原因。
对文件必须设置保护措施,例如只能执行,允许读等。
在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。
文件的操作至少有Create> delete> open、close> read、write等命令。
所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。
前者应包含文件主及它们的目录区指针;后者应给出每一个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。
此外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。
程序流程图:逻辑设计:使用线性数组表表示MFD,泛型数组表示UFD,每一个元素包括用户ID 、保存的文件 数、再使用线性表表示文件信息,每一个元素包括文件名,文件属性(保护码),文件的状 态等信息。
物理设计: 〃主目录private FileUser[] mfd; 〃当前用户private FileUser currentuser; /// < summary > ///文件 /// </summary>public class FileObject {public string filename; public int size=20; public int read=0; public int write = 0; public string author; }/// < summary > ///文件系统用户 /// </summary> public class FileUser { public string username;public List<FileObject> ufd = new List<FileObject>(); public int filecount=0; }步骤详述:1、主目录及用户目录机构显示:mF d : mF d Liser_0 r 3丄0 2 丄2卜nf d_user_0 mf d_user_0ufd=.20-mfd_user_0 nfd :mfd user 1,3uf d : ..ZB^inf d_Li£ep_l ~uf d : ,20^11£d_usep_l ——uf d : d_usepl mf d : mF d Lisei* 2,3nF d : , 2 0 mf d_u s e i'_2 uFd : d_usei'_2 --ufd = d_user_2nf d : mf d Liser_3.3uf d : d_user 3 uf d : d_user 32、当前操作用户登录:请输入用户名;mf d._u.sei'_2当前用户:mFd_ugF_23、文件管理系统菜单:欢迎进入文件管理系統,------------ create --------------------------------- O p eri--------------------------------- c lose -------------------------------- d elete ------------------------------- r ead --------------------------------- w rite -------------------------------- e xit ----------------------请输入操作命令:4、create 命令:情输入瑾作命令:c i'e at e请输入新件名:54120703B124MJY.TXT傲功仓催玄曲 _______5、open 命令:青输入操作命令;open陆输入文件名:54120701杖件术律在!一请输入操作命令;□pen请输入文件名;541207030124MJY.TXT成功打开文件!ID:3 ------------------------------------------------FileName:5412B7e30124MJ¥.TKT £iae:20ftutop:mFd_usep_26、close 命令:C AJ-Lr请输入操作命令;close同关鬲玄件_____7、delete 命令:青输入操作命令;delete 毎输入文件名,541207030124MJV.TXT 僦功删癖福!,..8、read命令请输入操作命令,peadM输入文件名:541207030124MJY.TXT口诘成玄杜丨9、write 命令■请输入操作命令,■■请输入文件各■■541207030124MJY.TXT ■10、exit 命令exit應好,您已经成功退出系统!四、实验总结通过这次的课程设计使我认识到要将操作系统这门计算机专业的课学好不仅仅是要把书上的基本知识学好而且还要不断进行实践将所学的跟实践操作结合起来才干更好地巩固所学,才干提高自己实践能力.通过这次的设计使我认识到只停留在表面理解问题是很难使问题得到很好的解决的,实践能力与理论知识同样重要。
可以说此课程设计的理论难度并不大,但是若要深入发掘其中的东西,并且实际去编程实现,就遇到了相当大的难度。
因为与之涉及的不少方面并没有学过,需要自己去自学和实践检验。
五、程序清单using System;using System.Collections. Generic;using System. Linq;using System. Text;namespace filemanagesystem{class Program{static void Main(string[] args){//初始化用户自摹拟文件系统ExplorerlnUser explorer = new ExplorerInUser(); }}/// 〈summary〉///文件管理系统for用户自摹拟/// 〈/summary〉public class ExplorerlnUser(〃命令列表private string口command = ( 〃主目录private FileUser口mfd;〃当前用户private FileUser currentuser;/// 〈summary〉///构造函数/// 〈/summary〉public ExplorerInUser()(INI();}/// 〈summary〉///初始化系统/// 〈/summary〉private void INI()(if (currentuser == null)(〃主目录实现IniUserList();}〃系那是菜单InilizeMenu();bool isinput = false;〃输入正确的命令while (!isinput)(string input = Console.ReadLine(); isinput二CommandGroup(input);}}#region主目录/// 〈summary〉///获取用户个数/// 〈/summary〉/// 〈returns〉〈/returns〉private int GetUserCount() ( string input = Console.ReadLine();try(int user_size = Convert.ToInt32(input);return user_size;} —catch (Exception e)(Console.WriteLine(e.Message);return 0;}}/// 〈summary〉///生成用户及用户管理文件/// </summary>private void IniUserList()(int user_size = GetUserCount();mfd=new FileUser[user_size];for (int i = 0; i < user_size; i++)(mfd[i] = new FileUser();mfd[i].filecount = 3;+ mfd[i].username + + mfd[i].filecount);for (int j = 0; j < 3; j++)(FileObject file=new FileObject ();file.author = mfd[i]. username;r);mfd[i]. ufd. Add (file);}}IniLogin();}/// <summary>///用户登录/// </summary>private void IniLogin()(请输入用户名:bool issuccess = false;while (!issuccess)(string username = Console.ReadLine();for (int i = 0; i < mfd.Length; i++)(if (mfd[i].username.Equals(username))(issuccess = true; currentuser = mfd[i];当前用户:break;}}if (!issuccess)(请重新输入输入用户名: }}}#endregion#region 菜单/// 〈summary〉///初始化菜单/// </summary>private void InilizeMenu()(欢迎进入文件管理系统请输入操作命令:}/// <summary>///功能分组判断/// 〈/summary〉/// <returns></returns>private bool CommandGroup(string command)(bool isexit = true; switch (command)(default:isexit = false; break;}if (isexit) ( INI(); }请重新输入操作命令: return isexit;}#endregion#region操作命令方法/// 〈summary〉///创建新的文件/// </summary> private void create() (请输入新件名:string filename = Console.ReadLine(); currentuser.filecount++;FileObject file = new FileObject(); file.filename = filename;file.author = ername; currentuser.ufd.Add(file);成功创建文件!}/// <summary>///打开指定的文件/// </summary> private void open() ( 请输入文件名:string filename =Console.ReadLine();for (int i = 0; i < currentuser.ufd.Count; i++)(if (currentuser.ufd[i].filename.Equals(filename))(成功打开文件!+ currentuser.ufd[i].size);+ currentuser.ufd[i].author);return;}文件不存在!}/// <summary>///关闭所有打开的文件/// 〈/summary〉private void close() ( 已关闭文件}/// <summary>///删除文件/// </summary> private void delete() (请输入文件名:string filename = Console.ReadLine();for (int i = 0; i < currentuser.ufd.Count; i++)(if (currentuser.ufd[i].filename.Equals(filename))(currentuser.ufd.RemoveAt(i);成功删除文件!return;}文件不存在!}/// <summary>///读取文件/// </summary> private void read() ( 请输入文件名:string filename =Console.ReadLine();for (int i = 0; i < currentuser.ufd.Count; i++) (if (currentuser.ufd[i].filename.Equals(filename)) (已读取文件!return;}文件不存在!}/// <summary>///写入文件/// </summary> private void write() (请输入文件名:string filename =Console.ReadLineO; for (int i = 0; i < currentuser.ufd.Count; i++) (if (currentuser.ufd[i].filename.Equals(filename)) (已写入文件!return;}文件不存在!}/// <summary>///退出系统/// </summary> private void exit() (您好,您已经成功退出系统Console.ReadKey();}#endregion}/// <summary>/// 文件/// </summary> public class FileObject ( public string filename; public int size=20;public int read=0; public int write = 0; public string author;/// <summary>///文件系统用户/// </summary>public class FileUser (public string username;public List<FileObject> ufd = new publicList<FileObject>();int filecount=0;}}。