private long CountSubDirectoriesSize(DirectoryInfo[] subDirectories, bool isRoot)
        {
            long resultSize = 0;

            for (int i = 0; i < subDirectories.Length; i++)
            {
                DirectoryInfo subDirInfo = subDirectories[i];

                DirTreeNode childNode = AddChild(subDirInfo);

                resultSize += childNode.ProcessCountSize();

                if (isRoot)
                {
                    //max value = number of subdirectories in the root
                    //+1 because of files in the root itself
                    ReportProgress(i + 1, subDirectories.Length + 1);
                }
#if (DEBUG)
                System.Threading.Thread.Sleep(100);
#endif
            }

            return(resultSize);
        }
        private long CountFilesSize(FileInfo[] dirFiles, bool addSizeItem)
        {
            long resultSize = 0;

            foreach (FileInfo file in dirFiles)
            {
                try
                {
                    resultSize += file.Length;
                }
                catch (IOException)
                {
                    DirData data = new DirData(file.Name);

                    DirTreeNode childNode = AddChild(data);
                    childNode.Subscriber.AddSize(data);
                }
            }

            if (resultSize > 0 && addSizeItem)
            {
                DirData data = new DirData();
                data.Size      = new SizeInfo(resultSize);
                data.FilesOnly = true;

                DirTreeNode childNode = AddChild(data);
                childNode.Subscriber.AddSize(data);
            }

            return(resultSize);
        }
        public new DirTreeNode AddChild(DirData data)
        {
            DirTreeNode childNode = new DirTreeNode(data);

            Children.Add(childNode);
            Subscriber.AddChild(childNode);

            return(childNode);
        }
        public DirTreeNode AddChild(DirectoryInfo dirInfo)
        {
            DirTreeNode childNode = new DirTreeNode(dirInfo);

            Children.Add(childNode);
            Subscriber.AddChild(childNode);

            return(childNode);
        }