Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        // 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);
        }
Beispiel #4
0
        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);
        }