操作系统实验报告实验名称:文件管理专业班级:网络工程1301学号:姓名:2015 年6 月16 日实验一文件管理一、实验目的文件管理是操作系统的一个非常重要的组成部分。
学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。
从而对各种文件操作命令的实质容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。
二、预备知识1.VS2010的使用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、主目录及用户目录机构显示:2、当前操作用户登录:3、文件管理系统菜单:4、create命令:5、open命令:6、close命令:7、delete命令:8、read命令9、write命令10、exit命令四、实验总结通过这次的课程设计使我认识到要将操作系统这门计算机专业的课学好不仅仅是要把书上的基本知识学好而且还要不断进行实践,将所学的跟实践操作结合起来才能更好地巩固所学,才能提高自己实践能力.通过这次的设计使我认识到只停留在表面理解问题是很难使问题得到很好的解决的,实践能力与理论知识同样重要。
可以说此课程设计的理论难度并不大,但是若要深入发掘其中的东西,并且实际去编程实现,就遇到了相当大的难度。
因为与之涉及的很多方面并没有学过,需要自己去自学和实践检验。
五、程序清单using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace filemanagesystem{class Program{static void Main(string[] args){//初始化用户自模拟文件系统ExplorerInUser explorer = new ExplorerInUser();}}/// <summary>/// 文件管理系统for用户自模拟/// </summary>public class ExplorerInUser{//命令列表private string[] command = { "create", "open", "close", "delete", "read", "write","exit" };//主目录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].username = "mfd_user_"+i;mfd[i].filecount = 3;Console.WriteLine("mfd:" + mfd[i].username + "," + mfd[i].filecount);for (int j = 0; j < 3; j++){FileObject file=new FileObject ();file.author = mfd[i].username;Console.WriteLine("--ufd:"+file.filename+","+file.size+","+file.author);file.filename="file"+j;mfd[i].ufd.Add(file);}}IniLogin();}/// <summary>/// 用户登录/// </summary>private void IniLogin(){Console.WriteLine("请输入用户名:");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];Console.WriteLine("当前用户:"+username);break;}}if (!issuccess){Console.WriteLine("请重新输入输入用户名:");}}}#endregion#region 菜单/// <summary>/// 初始化菜单/// </summary>private void InilizeMenu(){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("请输入操作命令:");}/// <summary>/// 功能分组判断/// </summary>/// <param name="command"></param>/// <returns></returns>private bool CommandGroup(string command) {bool isexit = 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(); return true; break;default:isexit = false;break;}if (isexit) { INI(); }else { Console.WriteLine("请重新输入操作命令:"); } return isexit;}#endregion#region 操作命令方法/// <summary>/// 创建新的文件/// </summary>private void create(){Console.WriteLine("请输入新件名:");string filename = Console.ReadLine();currentuser.filecount++;FileObject file = new FileObject();file.filename = filename;file.author = ername;currentuser.ufd.Add(file);Console.WriteLine("成功创建文件!");}/// <summary>/// 打开指定的文件/// </summary>private void open() {Console.WriteLine("请输入文件名:");string filename = Console.ReadLine();for (int i = 0; i < currentuser.ufd.Count; 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("文件不存在!");}/// <summary>/// 关闭所有打开的文件/// </summary>private void close() {Console.WriteLine("已关闭文件");}/// <summary>/// 删除文件/// </summary>private void delete(){Console.WriteLine("请输入文件名:");string filename = Console.ReadLine();for (int i = 0; i < currentuser.ufd.Count; i++){if (currentuser.ufd[i].filename.Equals(filename)){currentuser.ufd.RemoveAt(i);Console.WriteLine("成功删除文件!");return;}} Console.WriteLine("文件不存在!");}/// <summary>/// 读取文件/// </summary>private void read() {Console.WriteLine("请输入文件名:");string filename = Console.ReadLine();for (int i = 0; i < currentuser.ufd.Count; i++){if (currentuser.ufd[i].filename.Equals(filename)){Console.WriteLine("已读取文件!");return;}} Console.WriteLine("文件不存在!");}/// <summary>/// 写入文件/// </summary>private void write() {Console.WriteLine("请输入文件名:");string filename = Console.ReadLine();for (int i = 0; i < currentuser.ufd.Count; i++){if (currentuser.ufd[i].filename.Equals(filename)){Console.WriteLine("已写入文件!");return;}} Console.WriteLine("文件不存在!");}/// <summary>/// 退出系统/// </summary>private void exit() {Console.WriteLine("您好,您已经成功退出系统!");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 List<FileObject>();public int filecount=0;}}。