⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.cs

📁 os 课程设计不含文档 123456789
💻 CS
📖 第 1 页 / 共 5 页
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace os
{
    class file
    {
        public string currentdir;//当前路径
        disk disk_ = new disk();//
        //int dangqianblock = new int();
        //int dangqianweizhi = new int();
        //int spath1 = 1;//从第一个子目录开始
        //int spath2 = 2;
        int j = 0;
        private void splitfilename(string fullname, ref string filename, ref string extrename)//分割文件名
        {
            fullname.Trim();
            if (string.Equals(fullname, null))
            {
                MessageBox.Show("文件名不能为空!");
                return;
            }
            string[] temp = new string[2];
            temp = fullname.Split('.');
            filename = temp[0];
            extrename = temp[1];
            if (extrename.Length == 0)
            {
                extrename = "";
            }
            if (filename.Length > 6)
            {
                filename = filename.Remove(7);
            }
            if (extrename.Length > 3)
            {
                extrename = extrename.Remove(4);
            }

        }
        public void builtfilename(ref string fullname, string filename, string extrename)//合成文件全名
        {
            if (extrename.Length == 0)
                fullname = filename;
            else
                fullname = filename + "." + extrename;
        }
        public void builtfullpath(string childdirname)//生成带路径文件名
        {

        }
        public string[] splitfullpath(string fullpath)//分割全路径
        {
            fullpath.Trim();
            if (string.Equals(fullpath, null))
            {
                MessageBox.Show("路径不能为空!");
            }
            string[] paths;
            paths = fullpath.Split('\\');
            return paths;
        }
        #region 创建文件
        public bool createfile(string fullpath, string filename, string ename)//创建文件
        {
            //int mubiaoblock = 0;                
            string[] paths;
            int mubiaoweizhi = -1;                   
            paths = splitfullpath(fullpath);

            if (paths[0] == "C")
            {
                disk_.diskfilename = disk_.diskfile[0];
            }
            else
            {
                disk_.diskfilename = disk_.diskfile[1];
            }
            j = 0;
            int block1 = 1;
            int block2 = 2;
            for (int i = 0; i < paths.Length-1; i++)
            {
                disk_.readblock1(block1);
                string[] name = new string[8];
                for (int n = 0; n < 8; n++)
                {
                    name[n] = Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 0])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 1])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 2])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 3])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 4])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 5]));
                    name[n] = name[n].Trim();
                }
                for (int m = 0; m < 8; m++)
                {
                    if (name[m] == paths[i + 1])
                        mubiaoweizhi = m;
                }
                if (mubiaoweizhi == -1)
                {
                    disk_.readblock1(block2);
                    for (int n = 0; n < 8; n++)
                    {
                        name[n] = Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 0])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 1])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 2])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 3])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 4])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 5]));
                        name[n] = name[n].Trim();
                    }
                    for (int m = 0; m < 8; m++)
                    {
                        if (name[m] == paths[i + 1])
                            mubiaoweizhi = m;
                    }
                }
                block1 = Convert.ToInt32(disk_.buffer1[mubiaoweizhi * 16 + 11]);
                block2 = Convert.ToInt32(disk_.buffer1[mubiaoweizhi * 16 + 12]);
            }
            disk_.readblock1(block1);
            mubiaoweizhi = -1;
            for (int i = 0; i < 8; i++)
            {
                if (Convert.ToInt32(disk_.buffer1[i * 16 + 15]) == 0)
                    mubiaoweizhi = i;
            }
            if (mubiaoweizhi == -1)
            {
                disk_.readblock1(block2);
                for (int i = 0; i < 8; i++)
                {
                    if (Convert.ToInt32(disk_.buffer1[i * 16 + 15]) == 0)
                        mubiaoweizhi = i;
                }
                char[] fcb = new char[16];
                char[] fn = new char[filename.Length];
                char[] en = new char[ename.Length];
                fn = filename.ToCharArray();
                en = ename.ToCharArray();
                byte[] byfn = new byte[6];
                byte[] byen = new byte[3];
                for (int i = 0; i < fn.Length; i++)
                {
                    byfn[i] = Convert.ToByte(fn[i]);
                }
                for (int i = 5; i > fn.Length - 1; i--)
                {
                    byfn[i] = Convert.ToByte(' ');
                }
                byen[0] = Convert.ToByte(en[0]);
                byen[1] = Convert.ToByte(en[1]);
                byen[2] = Convert.ToByte(en[2]);
                // 寻找位置写入fcb
                int bk = disk_.qblock();
                disk_.readblock1(block2);
                disk_.buffer1[mubiaoweizhi * 16 + 11] = Convert.ToByte(bk);
                disk_.buffer1[mubiaoweizhi * 16 + 0] = byfn[0];
                disk_.buffer1[mubiaoweizhi * 16 + 1] = byfn[1];
                disk_.buffer1[mubiaoweizhi * 16 + 2] = byfn[2];
                disk_.buffer1[mubiaoweizhi * 16 + 3] = byfn[3];
                disk_.buffer1[mubiaoweizhi * 16 + 4] = byfn[4];
                disk_.buffer1[mubiaoweizhi * 16 + 5] = byfn[5];
                disk_.buffer1[mubiaoweizhi * 16 + 6] = byen[0];
                disk_.buffer1[mubiaoweizhi * 16 + 7] = byen[1];
                disk_.buffer1[mubiaoweizhi * 16 + 8] = byen[2];
                disk_.buffer1[mubiaoweizhi * 16 + 15] = Convert.ToByte(1);
                disk_.buffer1[mubiaoweizhi * 16 + 9] = Convert.ToByte(1);
                
                disk_.writeblock1(block2);
            }
            else
            {
                //disk_.readblock1(1);
                char[] fcb = new char[16];
                char[] fn = new char[filename.Length];
                char[] en = new char[ename.Length];
                fn = filename.ToCharArray();
                en = ename.ToCharArray();
                byte[] byfn = new byte[6];
                byte[] byen = new byte[3];
                for (int i = 0; i < fn.Length; i++)
                {
                    byfn[i] = Convert.ToByte(fn[i]);
                }
                for (int i = 5; i > fn.Length - 1; i--)
                {
                    byfn[i] = Convert.ToByte(' ');
                }
                byen[0] = Convert.ToByte(en[0]);
                byen[1] = Convert.ToByte(en[1]);
                byen[2] = Convert.ToByte(en[2]);
                // 寻找位置写入fcb
                int bk = disk_.qblock();
                disk_.readblock1(block1);
                disk_.buffer1[mubiaoweizhi * 16 + 11] = Convert.ToByte(bk);
                disk_.buffer1[mubiaoweizhi * 16 + 0] = byfn[0];
                disk_.buffer1[mubiaoweizhi * 16 + 1] = byfn[1];
                disk_.buffer1[mubiaoweizhi * 16 + 2] = byfn[2];
                disk_.buffer1[mubiaoweizhi * 16 + 3] = byfn[3];
                disk_.buffer1[mubiaoweizhi * 16 + 4] = byfn[4];
                disk_.buffer1[mubiaoweizhi * 16 + 5] = byfn[5];
                disk_.buffer1[mubiaoweizhi * 16 + 6] = byen[0];
                disk_.buffer1[mubiaoweizhi * 16 + 7] = byen[1];
                disk_.buffer1[mubiaoweizhi * 16 + 8] = byen[2];
                disk_.buffer1[mubiaoweizhi * 16 + 15] = Convert.ToByte(1);
                disk_.buffer1[mubiaoweizhi * 16 + 9] = Convert.ToByte(1);
                
                disk_.writeblock1(block1);
            }   
            return true;
        }
        #endregion
        public int findblock(string mulu, int block)//确定目录在第几个fcb里面!!!!!!!!还要添加上,判断这个fcb是否存在文件
        {
            int j = -1;
            disk_.readblock1(block);
            for (int i = 0; i < 8; i++)
            {
                string findname = Convert.ToString(disk_.buffer1[i * 16 + 0]) + Convert.ToString(disk_.buffer1[i * 16 + 1]) + Convert.ToString(disk_.buffer1[i * 16 + 2]) + Convert.ToString(disk_.buffer1[i * 16 + 3]) + Convert.ToString(disk_.buffer1[i * 16 + 4]) + Convert.ToString(disk_.buffer1[i * 16 + 5]);
                findname = findname.Trim();
                if (findname == mulu)
                {
                    j = i;
                }
            }
            return j;
        }
        public bool createfile(string fullname)
        {
            string filename = "";
            string extrename = "";
            splitfilename(fullname, ref filename, ref  extrename);
            return createfile(currentdir, filename, extrename);
        }
        public bool createdir(string dirname)//创建目录
        {
            return created(currentdir, dirname);
        }
        public string[,] nodes()//返回节点
        {
            string[] paths;
            int mubiaoweizhi = -1;
            paths = splitfullpath(currentdir);

            if (paths[0] == "C")
            {
                disk_.diskfilename = disk_.diskfile[0];
            }
            else if (paths[0] == "D")
            {
                disk_.diskfilename = disk_.diskfile[1];
            }
            else
            {
                disk_.diskfilename = disk_.diskfile[0];
            }
            int block1 = 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -