Пример #1
0
        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);
        }
Пример #2
0
        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";
            }
        }
Пример #3
0
        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";
            }
        }
Пример #4
0
        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";
            }
        }
Пример #5
0
        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";
                    }
                }
            }
        }