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); } }
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); }
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); }
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); }
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); }