コード例 #1
0
ファイル: FolderNode.cs プロジェクト: stephenwelsh/msiext
        public void AddChildFolderNode(FolderNode child)
        {
            FolderNode node = FindFolderNode(child);

            if (node != null)
            {
                foreach (string key in child.IDS.Keys)
                {
                    node._ids.Add(key, key);
                    break;
                }
            }
            else
            {
                this._childFolderNodes.Add(child);
            }
        }
コード例 #2
0
ファイル: FolderNode.cs プロジェクト: zhanggaolei001/msiext
        public void AddChildFolderNode(FolderNode child)
        {
            FolderNode node = FindFolderNode(child);

            if (node != null)
            {
                foreach (string key in child.IDS.Keys)
                {
                    node._ids.Add(key, key);
                    break;
                }
            }
            else
            {
                this._childFolderNodes.Add(child);
            }
        }
コード例 #3
0
ファイル: FolderNode.cs プロジェクト: zhanggaolei001/msiext
        public FolderNode FindFolderNode(FolderNode child)
        {
            if (_folderNameInPath == child.FolderName)
            {
                return(this);
            }

            foreach (FolderNode node in _childFolderNodes)
            {
                FolderNode found = node.FindFolderNode(child);

                if (found != null)
                {
                    return(found);
                }
            }

            return(null);
        }
コード例 #4
0
ファイル: FolderNode.cs プロジェクト: zhanggaolei001/msiext
        // Find node given a path
        public FolderNode FindFolderNode(string path)
        {
            string[]   separator = { @"\" };
            string[]   folders   = path.Split(separator, StringSplitOptions.RemoveEmptyEntries);
            FolderNode node      = null;

            if (folders.Length > 0)
            {
                int index = 0;
                node = FindFolderNode(new FolderNode(folders[index]));

                for (; index < folders.Length && node != null; index++)
                {
                    node = node.FindFolderNode(new FolderNode(folders[index]));
                }
            }

            return(node);
        }
コード例 #5
0
ファイル: FolderNode.cs プロジェクト: stephenwelsh/msiext
        public FolderNode FindFolderNode(FolderNode child)
        {
            if (_folderNameInPath == child.FolderName)
                return this;

            foreach (FolderNode node in _childFolderNodes)
            {
               FolderNode found = node.FindFolderNode(child);

               if (found != null) return found;
            }

            return null;
        }
コード例 #6
0
ファイル: MsiProcessor.cs プロジェクト: zhanggaolei001/msiext
        public void ProcessFolderInformation(string parentDirectoryId)
        {
            View directoryView = _targetDb.OpenView(String.Format("Select Directory, Directory_Parent, DefaultDir from Directory where Directory_Parent = '{0}'", parentDirectoryId));

            directoryView.Execute();

            Record directoryRecord = directoryView.Fetch();

            while (directoryRecord != null)
            {
                string directoryId     = directoryRecord["Directory"].ToString();
                string directoryParent = directoryRecord["Directory_Parent"].ToString();
                string directoryName   = directoryRecord["DefaultDir"].ToString();

                // Check if it is a special folder
                bool isSpecialFolder = false;

                foreach (string specialFolder in SpecialFolders)
                {
                    if ((directoryId == specialFolder) || (directoryId.IndexOf(specialFolder) == 0 && directoryId.IndexOf(".") == specialFolder.Length))
                    {
                        if (!_directories.ContainsKey(directoryId))
                        {
                            isSpecialFolder = true;
                            _directories.Add(directoryId, String.Format("[{0}]", specialFolder));
                            _rootNode.AddChildFolderNode(new FolderNode(String.Format("[{0}]", specialFolder), directoryId));
                            break;
                        }
                    }
                }

                if (!isSpecialFolder)
                {
                    string parentPath = "";

                    _directories.TryGetValue(parentDirectoryId, out parentPath);

                    string path = ExtractFolderName(directoryName);

                    if (!String.IsNullOrEmpty(parentPath))
                    {
                        if (path == ".")
                        {
                            path = parentPath;
                        }
                        else
                        {
                            path = parentPath + "\\" + path;
                        }
                    }

                    // Add to the id, path view
                    if (!_directories.ContainsKey(directoryId))
                    {
                        // Console.WriteLine("Adding: {0} \t {1}", directoryId, folderName);
                        _directories.Add(directoryId, path);
                    }

                    //Add to tree view
                    FolderNode parentOrPeerNode = null;
                    if (!String.IsNullOrEmpty(path))
                    {
                        string nodePath = System.IO.Path.GetDirectoryName(path);

                        if (!String.IsNullOrEmpty(nodePath))
                        {
                            parentOrPeerNode = _rootNode.FindFolderNode(nodePath);
                        }
                        else
                        {
                            parentOrPeerNode = _rootNode.FindFolderNode(path);
                        }

                        //Get the last entry in the path string (not necessarily a file name)
                        path = System.IO.Path.GetFileName(path);
                        if (parentOrPeerNode != null)
                        {
                            parentOrPeerNode.AddChildFolderNode(new FolderNode(path, directoryId));
                        }
                        else
                        {
                            _rootNode.AddChildFolderNode(new FolderNode(path, directoryId));
                        }
                    }
                }

                _iterationcount++;
                //Console.WriteLine("-----------------------------------");
                //Console.WriteLine("ITERATION" + _iterationcount);
                //_rootNode.PrintChildNodes(0);
                //_rootNode.PrintDirectoryIds(0);
                //Console.WriteLine("-----------------------------------\n");

                ProcessFolderInformation(directoryId);

                directoryRecord.Close();
                directoryRecord = directoryView.Fetch();
            }

            directoryView.Close();
        }