示例#1
0
        /// <summary>
        /// 创建目录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void createDirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult result = new DialogResult();

            OS_Simulation.FileFunction newfile  = new OS_Simulation.FileFunction();
            OS_Simulation.Form_CMenu   formmenu = new OS_Simulation.Form_CMenu();
            result = formmenu.ShowDialog();
            if (result == DialogResult.OK)
            {
                string   name         = formmenu.menuname;
                string   pathname     = newfile.GetPathname(treeView1.SelectedNode.FullPath);
                string   fullpathname = pathname + "\\" + name;
                string[] names        = pathname.Split(new char[] { '\\', '.' });
                string   harddisk     = "";
                if (names[0] == "c:" || names[0] == "C:")
                {
                    harddisk = "disk1.txt";
                }

                if (names[0] == "d:" || names[0] == "D:")
                {
                    harddisk = "disk2.txt";
                }

                if (pathname.Length != 2)
                {
                    if (newfile.Search(pathname, harddisk) == 2)
                    {
                        MessageBox.Show("不能在文件下建立目录!", "注意", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }
                    else
                    {
                        newfile.CreateMenu(fullpathname, harddisk);
                    }
                }
                else
                {
                    newfile.CreateMenu(fullpathname, harddisk);
                }
                newfile.ReadFile(treeView1, contextMenuStrip1, imageList1);
                newfile.DrawDisk(groupBox2, "disk1.txt");
                newfile.DrawDisk(groupBox3, "disk2.txt");
            }
            if (result == DialogResult.Cancel)
            {
            }
        }
示例#2
0
        private void button_execute_Click(object sender, EventArgs e)
        {
            if (textBox_command.Text == "")
            {
                MessageBox.Show("请输入命令和文件路径", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            //分割路径
            string[] command_pathname = textBox_command.Text.Split(new char[] { ' ' });
            string   command          = command_pathname[0];
            string   pathname         = command_pathname[1];

            string[] names = pathname.Split(new char[] { '\\', '.' });
            OS_Simulation.FileFunction newfile = new OS_Simulation.FileFunction();

            string harddisk = "";

            if (names[0] == "c:" || names[0] == "C:")
            {
                harddisk = "disk1.txt";
            }

            if (names[0] == "d:" || names[0] == "D:")
            {
                harddisk = "disk2.txt";
            }

            if (command == "create")
            {
                int[] disknum = newfile.SearchFAT(1, harddisk);  //查找一个空盘块分配给文件


                byte attribute = new byte();
                if (names[names.Length - 1].Length == 1 && Convert.ToChar(names[names.Length - 1]) == 'e')
                {
                    attribute = 2;
                }
                else if (names[names.Length - 1].Length == 1 && Convert.ToChar(names[names.Length - 1]) == 't')
                {
                    attribute = 4;
                }
                else
                {
                    attribute = 8;
                }
                switch (attribute)
                {
                case 2:
                case 4:

                    if (newfile.Search(pathname, harddisk) != 2)
                    {
                        newfile.CreateFile(pathname, attribute, Convert.ToByte(disknum[0]), Convert.ToChar(1), harddisk); //建立exe文件或txt文件
                        newfile.RecordFileFAT(disknum, harddisk);                                                         //记录FAT表
                    }
                    else
                    {
                        MessageBox.Show("文件存在!", "注意", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                    break;

                case 8:
                    newfile.CreateMenu(pathname, harddisk);                 //建立目录

                    break;
                }
            }

            else if (command == "delete")
            {
                if (names[names.Length - 1].Length == 1)
                {
                    newfile.DeleteFile(pathname, harddisk);
                }
                else
                {
                    newfile.DeleteMenu(pathname, harddisk);
                }
            }

            else if (command == "edit")
            {
found:
                if (names[0] == "c:" || names[0] == "C:")
                {
                    harddisk = "disk1.txt";
                }

                if (names[0] == "d:" || names[0] == "D:")
                {
                    harddisk = "disk2.txt";
                }

                if (pathname.Length == 2)   //在本地C盘和D盘上编辑
                {
                    return;
                }

                string       halfpathname = pathname.Remove(pathname.Length - 6);
                char         attribute    = Convert.ToChar(names[names.Length - 1]);
                int          disknum;
                UTF8Encoding utf  = new UTF8Encoding();
                byte[]       name = utf.GetBytes(names[names.Length - 2]);
                if (names.Length == 3)   //例c:\aaa.t
                {
                    disknum = 3;
                }
                else
                {
                    disknum = newfile.Search(halfpathname, harddisk);
                }
                int item    = newfile.FindItem(disknum, name, attribute, harddisk)[0];
                int address = newfile.FindItem(disknum, name, attribute, harddisk)[1];
                buffer = newfile.ReadFCB(disknum, item, harddisk);                     //获取文件的FCB信息
                int[]      dnums   = newfile.FindDiskNumber(buffer.Address, harddisk); //找到文件占用的盘块返回整型数组
                FileStream Disk    = new FileStream(harddisk, FileMode.Open);
                byte[]     content = new byte[64 * dnums.Length];
                for (int i = 0; i < dnums.Length; i++)
                {
                    Disk.Seek(64 * (dnums[i] - 1), SeekOrigin.Begin);
                    Disk.Read(content, 64 * i, 64);
                }
                Disk.Close();

                filecontent = utf.GetString(content);
                Form_EFile   formfile = new Form_EFile(filecontent, buffer.Attribute, buffer.Name);
                DialogResult result   = formfile.ShowDialog();

                if (result == DialogResult.OK && formfile.flag == 1)
                {
                    //修改FCB信息
                    buffer.Name      = formfile.buffer.Name;
                    buffer.Type      = formfile.buffer.Type;
                    buffer.Attribute = formfile.buffer.Attribute;
                    buffer.Length    = Convert.ToChar(formfile.number);

                    string newname = "";
                    if (buffer.Attribute == 2 || buffer.Attribute == 3)
                    {
                        newname = utf.GetString(buffer.Name) + ".exe";
                    }
                    else
                    {
                        newname = utf.GetString(buffer.Name) + ".txt";
                    }
                    if (newfile.SearchPreNode(treeView1.SelectedNode, newname) == 1 || newfile.SearchNextNode(treeView1.SelectedNode, newname) == 1)
                    {
                        return;
                    }
                    newfile.DeleteFile(pathname, harddisk);                         //删除原文件
                    int[] newdnums = new int[formfile.number];
                    newdnums = newfile.SearchFAT(formfile.number, harddisk);        //寻找空盘块
                    newfile.RecordFileFAT(newdnums, harddisk);                      //记录FAT
                    newfile.WriteFile(disknum, item, buffer, harddisk);             //把新的FCB信息写入目录项
                    newfile.WriteContent(newdnums, formfile.filecontent, harddisk); //文件内容写入磁盘
                    newfile.ReadFile(treeView1, contextMenuStrip1, imageList1);
                    newfile.DrawDisk(groupBox2, "disk1.txt");
                    newfile.DrawDisk(groupBox3, "disk2.txt");
                }
                if (result == DialogResult.OK && formfile.flag == 0)
                {
                    goto found;
                }
                if (result == DialogResult.Cancel)
                {
                }
            }

            else if (command == "copy")
            {
                string   cpathname1 = command_pathname[1];
                string   cpathname2 = command_pathname[3];
                string[] names1     = cpathname1.Split(new char[] { '\\', '.' });
                string[] names2     = cpathname2.Split(new char[] { '\\', '.' });
                string   harddisk1  = "";
                string   harddisk2  = "";
                if (names1[0] == "c:" || names1[0] == "C:")
                {
                    harddisk1 = "disk1.txt";
                }

                if (names1[0] == "d:" || names1[0] == "D:")
                {
                    harddisk1 = "disk2.txt";
                }

                if (string.Equals(names1[0], names2[0]))
                {
                    harddisk2 = harddisk1;
                }
                else
                {
                    if (harddisk1 == "disk1.txt")
                    {
                        harddisk2 = "disk2.txt";
                    }
                    else
                    {
                        harddisk2 = "disk1.txt";
                    }
                }
                newfile.DeepCopyFile(command_pathname[1], command_pathname[3], harddisk1, harddisk2);
            }

            else if (command == "cut")
            {
                #region rubbish

                /*
                 * string cpathname1 = command_pathname[1];
                 * string cpathname2 = command_pathname[3];
                 * string[] names1 = cpathname1.Split(new char[] { '\\', '.' });
                 * string[] names2 = cpathname2.Split(new char[] { '\\', '.' });
                 * string harddisk1 = "";
                 * string harddisk2 = "";
                 * int flag = 0;
                 * if (names1[0] == "c:" || names1[0] == "C:")
                 * {
                 * harddisk1 = "disk1.txt";
                 * }
                 *
                 * if (names1[0] == "d:" || names1[0] == "D:")
                 * {
                 * harddisk1 = "disk2.txt";
                 * }
                 *
                 * if (string.Equals(names1[0], names2[0]))
                 * {
                 * harddisk2 = harddisk1;
                 * flag = 1;  //盘内剪切
                 * }
                 * else
                 * {
                 * flag = 2;     //盘间剪切
                 * if (harddisk1 == "disk1.txt")
                 * {
                 *    harddisk2 = "disk2.txt";
                 * }
                 * else
                 * {
                 *    harddisk2 = "disk1.txt";
                 * }
                 * }
                 * if (flag == 1)
                 * {
                 * newfile.CutFile(command_pathname[1], command_pathname[3], harddisk1);
                 * }
                 * if (flag == 2)
                 * {
                 * newfile.DeepCopyFile(command_pathname[1], command_pathname[3], harddisk1, harddisk2);
                 * newfile.DeleteFile(command_pathname[1], harddisk1);
                 * }
                 */
                #endregion
            }

            else
            {
                MessageBox.Show("无法识别的命令!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            newfile.ReadFile(treeView1, contextMenuStrip1, imageList1);
            newfile.DrawDisk(groupBox2, "disk1.txt");
            newfile.DrawDisk(groupBox3, "disk2.txt");
            textBox_command.Focus();
        }