public String GetFullNodeName(TreeNode node) { String FullName = ""; while (node != null && node.Parent != null) // node.Parent != null avoids the first node ("FileSystem" or "Registry") { FullName = TreeHelper.FullPath(node.Text, FullName); node = node.Parent; } FullName = FullName.Trim('\\'); return(FullName); }
private void OnAddEmptyDirBtnClick(object sender, EventArgs e) { FolderTreeNode parentNode = (FolderTreeNode)fsFolderTree.SelectedNode; if (parentNode == null) { MessageBox.Show("Please select a folder to add to"); return; } if (parentNode.deleted) { MessageBox.Show("Folder was deleted"); return; } retry_input: String newFolderName = ""; if (TreeHelper.InputBox("Add empty folder", "Folder name:", ref newFolderName) != DialogResult.OK || string.IsNullOrEmpty(newFolderName)) { return; } // Help user: don't let them allow root dirs such as "SomeDir". Instead, force "C_" or "%Program Files%" for root nodes. if (parentNode.Parent == null) // Adding to root dir { if ((newFolderName.Length < 2) || (newFolderName.Length == 2 && newFolderName[1] != '_') || (newFolderName.Length > 2 && newFolderName[0] != '%')) { if (MessageBox.Show(Messages.Messages.incorrectRootDir, "Warning", MessageBoxButtons.YesNo) != DialogResult.Yes) { goto retry_input; } } } if (newFolderName.Contains("\\")) { MessageBox.Show("Folder must not contain '\\'. Please specify one folder at a time."); return; } VirtFsNode virtFsNode = new VirtFsNode(); #pragma warning disable 1690 virtFsNode.FileName = TreeHelper.FullPath(parentNode.virtFsNode.FileName, newFolderName); #pragma warning restore 1690 virtFsNode.FileFlags = 0; // Folder, not file //String[] subdirs = newFolderName.Split('\\'); FolderTreeNode curParentNode = parentNode; FolderTreeNode folderOverwrite = null; //foreach (String subdir in subdirs) { foreach (FolderTreeNode childNode in curParentNode.Nodes) { if (childNode.Text.Equals(newFolderName, StringComparison.CurrentCultureIgnoreCase)) { if (!childNode.deleted) { MessageBox.Show("Folder already exists"); return; } else { folderOverwrite = childNode; childNode.deleted = false; if (childNode.childFiles != null) { foreach (FileData file in childNode.childFiles) { file.deleted = true;// make sure files from a previously deleted folder dont come back.. } } } } } } FolderTreeNode newNode; if (folderOverwrite != null) { newNode = folderOverwrite; } else { newNode = AddFileOrFolder(virtFsNode, newFolderName); // Also sets dirty = true if (newNode != null) { newNode.addedEmpty = true; } } RefreshFolderNodeRecursively(parentNode, 0); TreeViewEventArgs ev = new TreeViewEventArgs(parentNode); OnFolderTreeSelect(sender, ev); }
// function to add files and folders recursively private bool AddFileOrFolderRecursive(FolderTreeNode parentNode, String path) { // if path is a file if (File.Exists(path)) { VirtFsNode virtFsFileNode; FileData fileOverwrite = null; if (parentNode.childFiles != null) { foreach (FileData file in parentNode.childFiles) { if (!file.deleted && Path.GetFileName(file.virtFsNode.FileName).Equals(Path.GetFileName(path), StringComparison.CurrentCultureIgnoreCase)) { if (MessageBox.Show(String.Format("File \"{0}\" already exists, overwrite?", file.virtFsNode.FileName), "Overwrite?", MessageBoxButtons.YesNo) == DialogResult.No) { return(false); } else { if ((file.addedFrom != "")) { fileOverwrite = file; } else { file.deleted = true; } break; } } } } virtFsFileNode = new VirtFsNode(); #pragma warning disable 1690 virtFsFileNode.FileName = TreeHelper.FullPath(parentNode.virtFsNode.FileName, Path.GetFileName(path)); #pragma warning restore 1690 virtFsFileNode.FileFlags = VIRT_FILE_FLAGS.ISFILE; //it's a file if (Path.GetExtension(virtFsFileNode.FileName).Equals(".dll")) { virtFsFileNode.FileFlags |= VIRT_FILE_FLAGS.DEPLOY_UPON_PRELOAD; } System.IO.FileInfo fi = new System.IO.FileInfo(path); virtFsFileNode.EndOfFile = (ulong)fi.Length; if (fileOverwrite != null) { fileOverwrite.virtFsNode = virtFsFileNode; } else { AddFileOrFolder(virtFsFileNode, path); // Also sets dirty = true } if (parentNode == fsFolderTree.SelectedNode) { RefreshFolderNodeRecursively(parentNode, 0); TreeViewEventArgs ev = new TreeViewEventArgs(parentNode); OnFolderTreeSelect(null, ev); } return(true); } if (!Directory.Exists(path)) { return(false); } FolderTreeNode folderOverwrite = null; //foreach (String subdir in subdirs) { foreach (FolderTreeNode childNode in parentNode.Nodes) { if (childNode.Text.Equals(Path.GetFileName(path), StringComparison.CurrentCultureIgnoreCase)) { #pragma warning disable 1690 if (!childNode.deleted && MessageBox.Show(String.Format("Folder \"{0}\" already exists, overwrite?", childNode.virtFsNode.FileName), "Overwrite?", MessageBoxButtons.YesNo) == DialogResult.No) #pragma warning restore 1690 { return(false); } else { folderOverwrite = childNode; childNode.deleted = false; if (childNode.childFiles != null) { foreach (FileData file in childNode.childFiles) { file.deleted = true;// make sure files from a previously deleted folder dont come back.. } } break; } } } } String[] lsFiles = Directory.GetFiles(path); String[] lsDirs = Directory.GetDirectories(path); FolderTreeNode subdirNode; if (folderOverwrite == null) { // if path is a folder VirtFsNode virtFsDirNode = new VirtFsNode(); #pragma warning disable 1690 virtFsDirNode.FileName = TreeHelper.FullPath(parentNode.virtFsNode.FileName, Path.GetFileName(path)); #pragma warning restore 1690 virtFsDirNode.FileFlags = 0; //it's a dir subdirNode = AddFileOrFolder(virtFsDirNode, path); // Also sets dirty = true } else { subdirNode = folderOverwrite; } foreach (String file in lsFiles) { if (!AddFileOrFolderRecursive(subdirNode, file)) { return(false); } } foreach (String dir in lsDirs) { if (!AddFileOrFolderRecursive(subdirNode, dir)) { return(false); } } if (parentNode == fsFolderTree.SelectedNode) { RefreshFolderNodeRecursively(parentNode, 0); TreeViewEventArgs ev = new TreeViewEventArgs(parentNode); OnFolderTreeSelect(null, ev); } return(true); }
private void OnAddEmptyDirBtnClick(object sender, EventArgs e) { FolderTreeNode parentNode = (FolderTreeNode)fsFolderTree.SelectedNode; if (parentNode == null) { MessageBox.Show("Please select a folder to add to"); return; } if (parentNode.deleted) { MessageBox.Show("Folder was deleted"); return; } String newFolderName = ""; if (TreeHelper.InputBox("Add empty folder", "Folder name:", ref newFolderName) != DialogResult.OK || string.IsNullOrEmpty(newFolderName)) { return; } if (newFolderName.Contains("\\")) { MessageBox.Show("Folder must not contain '\\'. Please specify one folder at a time."); return; } VirtFsNode virtFsNode = new VirtFsNode(); #pragma warning disable 1690 virtFsNode.FileName = TreeHelper.FullPath(parentNode.virtFsNode.FileName, newFolderName); #pragma warning restore 1690 virtFsNode.FileFlags = 0; // Folder, not file //String[] subdirs = newFolderName.Split('\\'); FolderTreeNode curParentNode = parentNode; FolderTreeNode folderOverwrite = null; //foreach (String subdir in subdirs) { foreach (FolderTreeNode childNode in curParentNode.Nodes) { if (childNode.Text.Equals(newFolderName, StringComparison.CurrentCultureIgnoreCase)) { if (!childNode.deleted) { MessageBox.Show("Folder already exists"); return; } else { folderOverwrite = childNode; childNode.deleted = false; if (childNode.childFiles != null) { foreach (FileData file in childNode.childFiles) { file.deleted = true;// make sure files from a previously deleted folder dont come back.. } } } } } } FolderTreeNode newNode; if (folderOverwrite != null) { newNode = folderOverwrite; } else { newNode = AddFileOrFolder(virtFsNode, newFolderName); // Also sets dirty = true if (newNode != null) { newNode.addedEmpty = true; } } RefreshFolderNodeRecursively(parentNode, 0); TreeViewEventArgs ev = new TreeViewEventArgs(parentNode); OnFolderTreeSelect(sender, ev); }