public void mount() { Program.myForm.Log.Text += "Начало монтирования системы\n"; CountBlocks = (int)(StartMemoryHDD / Blocks_HDD); //Вычисление количества блоков inode_count = Blocks_HDD / Inode_Memory; //Вычисление количества инодов Program.myForm.Log.Text += "Количество памяти в байтах: " + StartMemoryHDD + "\n"; Program.myForm.Log.Text += "Размер блока: " + Blocks_HDD + " байт\n"; Program.myForm.Log.Text += "Размер inode: " + Inode_Memory + " байт\n\n"; Program.myForm.Log.Text += "Количество созданных блоков: " + CountBlocks + "\n"; Program.myForm.Log.Text += "Количество inode в блоках: " + inode_count + "\n"; Program.myForm.Log.Text += "Размер одного кластера: " + claster + "\n\n"; List <Block> Blocks = new List <Block>(CountBlocks); for (int i = 0; i < CountBlocks; i++) { inode[] ino = new inode[inode_count]; for (int j = 0; j < inode_count; j++) { ino[j] = new inode(); } Block inod = new Block(ino, Blocks_HDD / claster); for (int j = 0; j < Blocks_HDD / claster; j++) { inod.claster[j].SetNumber(i, j); } int c = 0; foreach (inode t in inod.InodeMap) { c++; t.inode_number = c; } Blocks.Add(inod); } Super = new Superblock(Blocks); Root.List = new List <TypeOf>(); Root.name = "Root"; Root.attributes = function_inode.Search_free_inode(); Root.attributes.di_uid = "admin"; Root.attributes.dimode.type = "folder"; Root.attributes.dimode.rights = "rw-rw"; Root.attributes.di_size = 0; Root.attributes.free = false; Serializing.Ser(Blocks); }
public void MainMenu() { if (Sess.user_id != 0) { switch (Program.myForm.Command.Text) { case "process": { Core core = new Core(4); core.init(); Core.proc[1].Memory = Core.proc[0].Memory; Core.mem[0].process.Add(Core.proc[1].PID); core.Planning(); break; } case "mount": { mount(); break; } case "user_to_file": { Serializing_User.Ser(Sess.user_list); break; } case "inode_map": { Program.myForm.Log.Text += "Block.Inode" + "\n"; List <string> t = Super.FreeInode(); for (int i = 0; i < t.Count; i++) { Program.myForm.Log.Text += t[i] + "\n"; } break; } case "claster_map": { Program.myForm.Log.Text += "Block.Claster" + "\n"; List <string> t = Super.FreeClaster(); for (int i = 0; i < t.Count; i++) { Program.myForm.Log.Text += t[i] + "\n"; } break; } case "exit": { function_user.new_session(); break; } case "lf": { catalog t = new catalog(); t = function_dir.See_folder(Sess.path); if (t.List.Count == 0) { Program.myForm.Log.Text += "В папке '" + t.name + "' пусто!\n\n"; } else { Program.myForm.Log.Text += "Папка '" + t.name + "' содержит:" + "\n"; for (int i = 0; i < t.List.Count; i++) { Program.myForm.Log.Text += t.List[i].name + " (" + t.List[i].attributes.dimode.type + ")\n"; } Program.myForm.Log.Text += "\n"; } break; } default: { Regex regex = new Regex(@"^(?<command>[A-Za-z_]+)[ ]*"); Match matches = regex.Match(Program.myForm.Command.Text); string command = String.Empty; if (matches.Success) { command = matches.Groups["command"].Value.ToString(); } switch (command) { //--------------------------------------- пользователи case "create_user": { if (Main.Sess.user_name == "admin") { function_user.Create_user(Program.myForm.Command.Text); } else { Program.myForm.Log.Text += "Для добавления учетной записи нужны права администратора!\n\n"; } break; } case "del_user": { if (Main.Sess.user_name == "admin") { function_user.Delete_user(Program.myForm.Command.Text); } else { Program.myForm.Log.Text += "Для удаления учетной записи нужны права администратора!\n\n"; } break; } case "reset_pass": { if (Main.Sess.user_name == "admin") { function_user.resetPass(Program.myForm.Command.Text); } else { Program.myForm.Log.Text += "Для изменения пароля учетной записи нужны права администратора!\n\n"; } break; } //--------------------------------------- папки case "create_dir": { Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<dir>[A-Za-z0-9]+)"); matches = regex_d.Match(Program.myForm.Command.Text); string dir = String.Empty; if (matches.Success) { dir = matches.Groups["dir"].Value.ToString(); function_dir.create_dir(dir, Sess.path, Sess.user_name); Serializing.Ser(Super.Blocks); } else { Program.myForm.Log.Text += "Некорректое имя директории!\n\n"; } break; } case "way": { Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<dir>[./A-Za-z0-9]+)"); matches = regex_d.Match(Program.myForm.Command.Text); string dir = String.Empty; if (matches.Success) { dir = matches.Groups["dir"].Value.ToString(); if (dir == "./") { string[] match = Sess.path.Split('/'); Sess.path = ""; for (int i = 0; i < match.Count() - 2; i++) { Sess.path += match[i] + '/'; } } else { Sess.path = function_dir.Search_folder(dir, Sess.path); } } else { Program.myForm.Log.Text += "Некорректый путь!\n\n"; } break; } case "rename": { Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<folder>[A-Za-z0-9]+)[|](?<rename>[A-Za-z0-9]+)"); matches = regex_d.Match(Program.myForm.Command.Text); string dir = String.Empty; if (matches.Success) { dir = matches.Groups["folder"].Value.ToString(); string rename = matches.Groups["rename"].Value.ToString(); { string c = Sess.path + dir + "/"; function_dir.ren_folder(c, rename); Serializing.Ser(Super.Blocks); } } else { Program.myForm.Log.Text += "Некорректно введена команда!\nВведите rename <oldName>|<newName>\n\n"; } break; } case "del_dir": { Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<folder>[A-Za-z0-9]+)"); matches = regex_d.Match(Program.myForm.Command.Text); string dir = String.Empty; if (matches.Success) { dir = matches.Groups["folder"].Value.ToString(); { function_dir.Dell_folder(Sess.path, dir); Serializing.Ser(Super.Blocks); } } else { Program.myForm.Log.Text += "Некорректно введено имя директории!\n\n"; } break; } //--------------------------------------- файлы case "create_file": { Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<fil>[A-Za-z0-9]+)"); matches = regex_d.Match(Program.myForm.Command.Text); string fil = String.Empty; if (matches.Success) { fil = matches.Groups["fil"].Value.ToString(); function_file.create_file(fil, Sess.path, Sess.user_name); Serializing.Ser(Super.Blocks); } else { Program.myForm.Log.Text += "Некорректно введено имя файла!\n\n"; } break; } case "del_file": { Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<fil>[A-Za-z0-9]+)"); matches = regex_d.Match(Program.myForm.Command.Text); string fil = String.Empty; if (matches.Success) { fil = matches.Groups["fil"].Value.ToString(); { string c = Sess.path; function_dir.Dell_folder(c, fil); Serializing.Ser(Super.Blocks); } } else { Program.myForm.Log.Text += "Некорректно введено имя файла!\n\n"; } break; } case "insert_file": { Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<files>[A-Za-z0-9]+)"); matches = regex_d.Match(Program.myForm.Command.Text); string dir = String.Empty; if (matches.Success) { dir = matches.Groups["files"].Value.ToString(); Boolean tr = function_file.Is_file(dir, Main.Sess.path); if (tr) { file f = new file(); //нужный файл f = function_file.search_file_retf(dir, Main.Sess.path); //поиск нужного файла //Если учетная запись админа или если создателю можно записывать, или если другим пользователям можно записывать if ((Main.Sess.user_name == "admin") || ((f.attributes.di_uid == Main.Sess.user_name) && (function_inode.rights_for_all(f)[1])) || ((function_inode.rights_for_all(f)[3]))) { function_file.modify_file(f); } else { Program.myForm.Log.Text += "Вам не разрешено редактировать этот файл. \nВы не являетесь владельцем данного файла.\n\n"; } } else { Program.myForm.Log.Text += "Файл не существует или у вас нет прав для доступа к нему\n\n"; } } else { Program.myForm.Log.Text += "Некорректно введено имя файла!\n\n"; } break; } case "edit_file": { Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<files>[A-Za-z0-9]+)"); matches = regex_d.Match(Program.myForm.Command.Text); string dir = String.Empty; if (matches.Success) { dir = matches.Groups["files"].Value.ToString(); Boolean tr = function_file.Is_file(dir, Main.Sess.path); if (tr) { //Находим текст файла file f = new file(); //нужный файл f = function_file.search_file_retf(dir, Main.Sess.path); //поиск нужного файла //Если учетная запись админа или если создателю можно записывать, или если другим пользователям можно записывать if ((Main.Sess.user_name == "admin") || ((f.attributes.di_uid == Main.Sess.user_name) && (function_inode.rights_for_all(f)[1])) || ((function_inode.rights_for_all(f)[3]))) { string text = function_file.see_file(dir, Main.Sess.path); function_file.modify_file(f, text); } else { Program.myForm.Log.Text += "Вам не разрешено редактировать этот файл. \nВы не являетесь владельцем данного файла.\n\n"; } } else { Program.myForm.Log.Text += "Файл не существует или у вас нет прав на его редактирование\n\n"; } Serializing.Ser(Super.Blocks); } else { Program.myForm.Log.Text += "Некорректно введено имя файла!\n\n"; } break; } case "watch_file": { Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<files>[A-Za-z0-9]+)"); matches = regex_d.Match(Program.myForm.Command.Text); string dir = String.Empty; if (matches.Success) { dir = matches.Groups["files"].Value.ToString(); Program.myForm.Log.Text += function_file.see_file(dir, Main.Sess.path) + "\n\n"; Serializing.Ser(Super.Blocks); } else { Program.myForm.Log.Text += "Некорректно введено имя файла!\n\n"; } break; } case "attr": { Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<files>[A-Za-z0-9]+)"); matches = regex_d.Match(Program.myForm.Command.Text); string dir = String.Empty; if (matches.Success) { dir = matches.Groups["files"].Value.ToString(); Program.myForm.Log.Text += function_file.attr(dir, Main.Sess.path); Serializing.Ser(Super.Blocks); } else { Program.myForm.Log.Text += "Некорректно введено имя!\n\n"; } break; } case "rights": { Regex regex_d = new Regex(@"^(?<command>[A-Za-z_]+)[ ](?<files>[A-Za-z0-9]+)[ ](?<rights>[r-][w-]-[r-][w-])"); matches = regex_d.Match(Program.myForm.Command.Text); string dir = String.Empty; string rights = String.Empty; if (matches.Success) { dir = matches.Groups["files"].Value.ToString(); rights = matches.Groups["rights"].Value.ToString(); function_inode.rights(dir, Main.Sess.path, rights); Serializing.Ser(Super.Blocks); } else { Program.myForm.Log.Text += "Некорректно введено имя или права!\n\n"; } break; } default: { Program.myForm.Log.Text += Program.myForm.Command.Text + ": Неизвестная команда\n\n"; break; } } break; } } } else { if (Program.myForm.Command.Text != "") { bool result = Start(Program.myForm.Command.Text); if (!result) { Program.myForm.Log.Text += "Необходимо войти в систему!\n\n"; } } } }