public static string Search_folder(string name, string path) { string path_res = "root/"; path += name + "/"; string[] path_l = path.Split('/'); catalog temp = new catalog(); temp.attributes = Main.Root.attributes; temp.name = Main.Root.name; temp.List = Main.Root.List; for (int i = 0; i < path_l.Count() - 1; i++) { temp.name = path_l[i]; //Перебор внутренних директорий for (int j = 0; j < temp.List.Count; j++) { //Если нашли нужную директорию... if ((temp.List[j].name == path_l[i]) && (i != path_l.Count())) { //Если мы алминистратор, или мы создатель и нам разрешено чтение и просмотр, //или если другим пользователям разрешено чтение и просмотр... if ( ( (Main.Sess.user_name == "admin") || ( (temp.List[j].attributes.di_uid == Main.Sess.user_name) && (function_inode.rights_for_all(temp.List[j])[0]) && (function_inode.rights_for_all(temp.List[j])[1]) ) || ( (function_inode.rights_for_all(temp.List[j])[2]) && (function_inode.rights_for_all(temp.List[j])[3]) ) ) ) { path_res += temp.List[j].name + "/"; temp.attributes = temp.List[j].attributes; temp.name = temp.List[j].name; catalog ab = (catalog)temp.List[j]; temp.List = ab.List; } else { Program.myForm.Log.Text += "У вас не прав для просмотра или редактирования данного каталога!\n\n"; } } } } return(path_res); }
public static void create_file(string name, string path, string user_name) { file f = new file(); f.name = name; // задаем имя // поиск свободного inode в блоках f.attributes = function_inode.Search_free_inode(); f.attributes.inode_number = 2; f.attributes.free = false; // устанавливаем inode как занятый f.attributes.di_size = 1024; f.attributes.di_uid = user_name; f.attributes.di_mtime = DateTime.Now; f.attributes.di_ctime = DateTime.Now; f.attributes.dimode.type = "file"; f.attributes.dimode.rights = "rw---"; f.attributes.di_addr[0] = function_inode.Search_free_cluster(); function_inode.SetFalse(f.attributes.di_addr[0]); //Если файл с таким именем еще нет, то создаем, иначе оповещаем пользователя if (!Is_file(name, path)) { // cоздание папки по пути string[] path_l = path.Split('/'); catalog temp = new catalog(); temp.attributes = Main.Root.attributes; temp.name = Main.Root.name; temp.List = Main.Root.List; for (int i = 0; i < path_l.Count() - 1; i++) { temp.name = path_l[i]; for (int j = 0; j < temp.List.Count; j++) { if ((temp.List[j].name == path_l[i]) && (i != path_l.Count())) { temp.attributes = temp.List[j].attributes; temp.name = temp.List[j].name; catalog ab = (catalog)temp.List[j]; temp.List = ab.List; } } } temp.List.Add(f); Program.myForm.Log.Text += "Файл '" + name + "' создан \n\n"; } else { Program.myForm.Log.Text += "Файл с именем '" + f.name + "' уже существует!\n\n"; } }
public static void create_dir(string name, string path, string user_name) { catalog f = new catalog(); f.name = name; // задаем имя f.List = new List <TypeOf>(); // очищаем список файлов // поиск свободного inode в блоках f.attributes = function_inode.Search_free_inode(); f.attributes.inode_number = 2; f.attributes.free = false; // устанавливаем inode как занятый f.attributes.di_size = 0; f.attributes.di_uid = user_name; f.attributes.di_mtime = DateTime.Now; f.attributes.di_ctime = DateTime.Now; f.attributes.dimode.type = "folder"; f.attributes.dimode.rights = "rw---"; //Если директории с таким именем еще нет, то создаем, иначе оповещаем пользователя if (function_dir.Search_folder(name, path) == Main.Sess.path) { // cоздание папки по пути string[] path_l = path.Split('/'); catalog temp = new catalog(); temp.attributes = Main.Root.attributes; temp.name = Main.Root.name; temp.List = Main.Root.List; for (int i = 0; i < path_l.Count() - 1; i++) { temp.name = path_l[i]; for (int j = 0; j < temp.List.Count; j++) { if ((temp.List[j].name == path_l[i]) && (i != path_l.Count())) { temp.attributes = temp.List[j].attributes; temp.name = temp.List[j].name; catalog ab = (catalog)temp.List[j]; temp.List = ab.List; } } } temp.List.Add(f); //Main.Sess.path = Main.Sess.path + f.name + "/"; Program.myForm.Log.Text += "Папка '" + f.name + "' создана \n\n"; } else { Program.myForm.Log.Text += "Папка с именем '" + f.name + "' уже существует!\n\n"; } }
public static void Dell_folder(string path, string delname) { string[] path_l = path.Split('/'); catalog temp = new catalog(); temp.attributes = Main.Root.attributes; temp.name = Main.Root.name; temp.List = Main.Root.List; for (int i = 0; i < path_l.Count() - 1; i++) { temp.name = path_l[i]; for (int j = 0; j < temp.List.Count; j++) { if ((temp.List[j].name == path_l[i]) && (i != path_l.Count())) { temp.attributes = temp.List[j].attributes; temp.name = temp.List[j].name; catalog ab = (catalog)temp.List[j]; temp.List = ab.List; } } } //Флаг для обнаружения успешного выполнения bool isset = false; for (int i = 0; i < temp.List.Count; i++) { //if (temp.List[i].name.Equals(delname)) //Если нашли файл, который нужно удалить, и если учетная запись админа или если создателю можно удалять, или если другим пользователям можно удалять if ((temp.List[i].name.Equals(delname)) && (((Main.Sess.user_name == "admin") || ((temp.List[i].attributes.di_uid == Main.Sess.user_name) && (function_inode.rights_for_all(temp.List[i])[1])) || ((function_inode.rights_for_all(temp.List[i])[3]))))) { //Меняем выводимый результат в зависимости от типа string result = "Папка '" + delname + "' удалена\n\n"; if (temp.List[i].attributes.dimode.type == "file") { result = "Файл '" + delname + "' удален\n\n"; } temp.List[i].attributes.di_uid = "root"; temp.List[i].attributes.free = true; temp.List[i].attributes.dimode.rights = "rwx-rwx"; temp.List[i].attributes.dimode.type = " "; for (int j = 0; j < temp.List[i].attributes.di_addr.Count(); j++) { temp.List[i].attributes.di_addr[j] = 0; } temp.List.RemoveAt(i); isset = true; Program.myForm.Log.Text += result; } else if (temp.List[i].name.Equals(delname)) { isset = true; if (temp.List[i].attributes.dimode.type == "file") { Program.myForm.Log.Text += "У вас нет прав на удаление этого файла!\nВы не являетесь владельцем данного файла.\n\n"; } else { Program.myForm.Log.Text += "У вас нет прав на удаление этой директории!\nВы не являетесь владельцем данной директории.\n\n"; } } } if (!isset) { Program.myForm.Log.Text += "Данной директории или файла не существует!\n\n"; } }
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"; } } } }