Exemplo n.º 1
0
        private void listItems(int _index)          //列出文件夹下的文件
        {
            listView.Items.Clear();
            inode _node = node[_index];

            for (int i = 0; ; i++)
            {
                string _name = datablock[_node.getBlock(0)].findInode(i);
                if (_name == null)
                {
                    break;
                }

                if (_name.Equals("..") || _name.Equals("."))
                {
                    continue;
                }
                int      size = -1;
                string   type = node[datablock[_node.getBlock(0)].findInode(_name)].getType();
                DateTime time = node[datablock[_node.getBlock(0)].findInode(_name)].getTime();
                if (type.Equals("文件"))
                {
                    size = calculate(_node, _name);
                }
                setViewItem(_name, type, size, time);
            }
        }
Exemplo n.º 2
0
        public void reNameFile(string newName, int _index)       //重命名文件
        {
            inode _node = node[workDir];

            datablock[_node.getBlock(0)].reNameInode(newName, _index);      //在父目录的inodetable中进行修改
            IOFormatter.getInstance().Serialize(IOStream.getInstance(), datablock);
        }
Exemplo n.º 3
0
        public Boolean reDirectCatalog(string name)     //切换文件目录或打开文件
        {
            inode _node = node[workDir];
            int   temp  = workDir;

            workDir = datablock[_node.getBlock(0)].reDirectInode(name);     //找到所选项的inode
            if (node[workDir].getType().Equals("文件"))
            {
                selectedFile = workDir;
                workDir      = temp;
                return(true);       //是文件直接打开
            }
            listItems(workDir);     //是文件夹进入目录
            return(false);
        }
Exemplo n.º 4
0
        public Boolean createEntry(string type, string _name)        //创建新的文件
        {
            int   parent = -1;
            inode _node  = null;

            if (_name != null)                                                  //点击文件夹创建
            {
                parent = datablock[node[workDir].getBlock(0)].findInode(_name); //选中文件夹为父目录
            }
            else                                                                //直接新建
            {
                parent = workDir;                                               //当前目录为父目录
            }

            _node = node[parent];
            List <int> nodeLoc  = nodeMap.findUnuse(1);    //找到未使用的inode节点
            List <int> blockLoc = blockMap.findUnuse(1);   //找到空闲磁盘块


            if (nodeLoc == null || blockLoc == null)        //inodeMap或blockMap用尽
            {
                return(false);
            }


            if (datablock[blockLoc[0]] == null)     //磁盘块未初始化
            {
                datablock[blockLoc[0]] = new dataBlock();
                if (type == "文件夹")
                {
                    initDir(blockLoc[0], parent, nodeLoc[0]);
                }
            }
            if (node[nodeLoc[0]] == null)       //inode为初始化
            {
                node[nodeLoc[0]] = new inode();
            }
            string name = "新建" + type;

            name = datablock[_node.getBlock(0)].createInode(name, nodeLoc[0]);
            if (_name == null)
            {
                setViewItem(name, type, 0, DateTime.Now);
            }
            node[nodeLoc[0]].init(nodeLoc[0], blockLoc, type, DateTime.Now);
            IOFormatter.getInstance().Serialize(IOStream.getInstance(), datablock);
            return(true);
        }
Exemplo n.º 5
0
        private int calculate(inode _node, string _name)     //计算文件大小
        {
            int[]  ptr     = node[datablock[_node.getBlock(0)].findInode(_name)].getBlockPtr();
            string content = "";

            for (int i = 0; i < 13; i++)        //遍历该文件的所有块,计算大小
            {
                if (datablock[ptr[i]] != null && datablock[ptr[i]].data != null && !datablock[ptr[i]].data.Equals(""))
                {
                    content += datablock[ptr[i]].data;
                    continue;
                }
                break;
            }
            byte[] sarr = Encoding.Default.GetBytes(content);
            return(sarr.Length);
        }