//撤销上一步操作 private void button7_Click(object sender, EventArgs e) { //检查之前是否有操作 if (iteraterList.Count == 0) { MessageBox.Show("无可撤销的操作", "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } FileIterater fileIterater = iteraterList[iteraterList.Count - 1]; //撤销对文件的删除 if (fileIterater.isfile && fileIterater.isdeleted) { recoverFile(fileIterater); } //撤销对目录的删除 else if (!fileIterater.isfile && fileIterater.isdeleted) { recoverFolder(fileIterater); } //撤销文件的创建,释放内存且不此操作可逆 else if (fileIterater.isfile && !fileIterater.isdeleted) { undoFileCreation(fileIterater); } //撤销文件夹的创建 else if ((!fileIterater.isfile && !fileIterater.isdeleted)) { undoFolderCreation(fileIterater); } }
//创建文件 private void button4_Click(object sender, EventArgs e) { if (treeView1.SelectedNode == null) { MessageBox.Show("请选择一个节点", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { //创建一个节点对象,并初始化 fileNode tmp; tmp = new fileNode(); if (newFileName == "") { MessageBox.Show("请输入名称", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { tmp.Text = newFileName + ".txt"; tmp.ToolTipText = "1"; //在TreeView组件中加入子节点 tmp.size = 0; //for (int i = 0; i < 32;i++ ) //{ // if(Fat[i].Name==tmp.Text) // { // MessageBox.Show("有重复命名的文件", "提示信息", // MessageBoxButtons.OK, MessageBoxIcon.Information); // return; // } //} //tmp.address = CreateFile(1, tmp.Text); if (!MemManager.CanCreate(tmp.Text)) { MessageBox.Show("有重复命名的文件", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } tmp.address = MemManager.AllocateFile(1, tmp.Text); if (tmp.address >= 0) { treeView1.SelectedNode.Nodes.Add(tmp); treeView1.SelectedNode = tmp; FileStream NewText = File.Create(tmp.Text); NewText.Close(); } else { MessageBox.Show("磁盘空间不足,创建失败", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } textBox2.Text = ""; FileIterater fileIterater = new FileIterater(tmp, treeView1.SelectedNode, true, false); iteraterList.Add(fileIterater); } } }
public void AddNode(FileIterater node) { node.next = this.next; node.last = this; this.next.last = node; this.next = node; }
private void undoFolderCreation(FileIterater fileIterater) { TreeNode father = fileIterater.father; TreeNode node = fileIterater.node; father.Nodes.Remove(node); iteraterList.RemoveAt(iteraterList.Count - 1); }
//撤销对目录的删除 private void recoverFolder(FileIterater fileIterater) { TreeNode father = fileIterater.father; TreeNode node = fileIterater.node; father.Nodes.Add(node); iteraterList.RemoveAt(iteraterList.Count - 1); }
//撤销文件的创建,释放内存且此操作不可逆 private void undoFileCreation(FileIterater fileIterater) { TreeNode father = fileIterater.father; TreeNode node = fileIterater.node; MemManager.ReleaseFile(node.Text); File.Delete(node.Text); father.Nodes.Remove(node); iteraterList.RemoveAt(iteraterList.Count - 1); }
////////////// //buttons ///////////// //删除文件 private void button3_Click(object sender, EventArgs e) { if (treeView1.SelectedNode == null) { MessageBox.Show("请选择一个节点删除", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (treeView1.SelectedNode.Parent == null) { MessageBox.Show("根节点不可以删除", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (treeView1.SelectedNode.ToolTipText == "1") { //int now = FindinFat(treeView1.SelectedNode.Text); //int pre = now; //while (Fat[now].next != -1) //{ // pre = now; // now = Fat[now].next; // Fat[pre].isStart = false; // Fat[pre].Name = ""; // Fat[pre].next = -1; // Fat[pre].busy = false; // emptyblock++; //} //Fat[now].isStart = false; //Fat[now].Name = ""; //Fat[now].next = -1; //Fat[now].busy = false; //emptyblock++; // FileIterater fileIterater = new FileIterater(treeView1.SelectedNode, treeView1.SelectedNode.Parent, true, true); iteraterList.Add(fileIterater); // } else { FileIterater fileIterater = new FileIterater(treeView1.SelectedNode, treeView1.SelectedNode.Parent, false, true); iteraterList.Add(fileIterater); } //DeleteFile(treeView1.SelectedNode.Nodes); //DeletePath(treeView1.SelectedNode); treeView1.Nodes.Remove(treeView1.SelectedNode); }
//撤销对文件的删除 private void recoverFile(FileIterater fileIterater) { TreeNode father = fileIterater.father; TreeNode node = fileIterater.node; //MemManager.AllocateFile(1, node.Text); father.Nodes.Add(node); FileStream NewText = File.Create(node.Text); NewText.Close(); StreamWriter sw = new StreamWriter(node.Text); sw.WriteLine(fileIterater.text); sw.Close(); sw.Dispose(); NewText.Close(); iteraterList.RemoveAt(iteraterList.Count - 1); }
//存储磁盘fat表 //public void SaveFat() //{ // for (int i = 0; i < 32; i++) // { // FileStream fs = new FileStream("fat.bin", FileMode.Append); // StreamWriter sw = new StreamWriter(fs); // string line = ""; // if (Fat[i].busy) // { // line = "1 " + Fat[i].Name + " " + Fat[i].next.ToString() + " "; // if (Fat[i].isStart) // line += "1"; // else // line += "0"; // } // else // line = "0 0 -1 -1"; // sw.WriteLine(line); // sw.Close(); // sw.Dispose(); // fs.Close(); // fs.Dispose(); // } //} //在fat表中找到文件起始块。 //public int FindinFat(string n) //{ // for(int i=0;i<32;i++) // { // if (Fat[i].isStart && Fat[i].Name == n) // return i; // } // return -1; //} //给文件分配块数 //public int CreateFile(int size,string name) //{ // if (emptyblock == 0) // return -1; // int num_block;//所需块数 // if(size%32!=0) // { // num_block = size / 32 + 1; // } // else // { // num_block = size / 32; // } // int prev = -1; // int start = -1; // if (num_block <= emptyblock) // { // for (int i = 0, j = 0; j < num_block; i++) // { // if (Fat[i].busy==false) // { // Fat[i].busy = true; // Fat[i].Name = name; // Fat[i].next = -1; // if (prev != -1) // { // Fat[prev].next = i; // Fat[i].isStart = false; // } // else // { // start = i; // Fat[i].isStart = true; // } // prev = i; // j++; // } // } // emptyblock -= num_block; // } // return start; //} private void button1_Click(object sender, EventArgs e) //添加目录 { if (treeView1.SelectedNode == null) { MessageBox.Show("请选择一个节点", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { //创建一个节点对象,并初始化 fileNode tmp; tmp = new fileNode(); if (newPathName == "") { MessageBox.Show("请输入名称", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { tmp.Text = newPathName; tmp.BackColor = Color.Yellow; tmp.ToolTipText = "0"; //在TreeView组件中加入子节点 tmp.size = 0; tmp.address = -1; if (repeatName(treeView1.SelectedNode.Nodes, tmp.Text)) { MessageBox.Show("有重复命名,创建失败", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } treeView1.SelectedNode.Nodes.Add(tmp); treeView1.SelectedNode = tmp; textBox1.Text = ""; FileIterater fileIterater = new FileIterater(tmp, treeView1.SelectedNode, false, false); iteraterList.Add(fileIterater); } } }
public void RemoveNode() { this.last.next = this.next; this.next.last = this.last; }