Ejemplo n.º 1
0
        /// <summary>
        /// フッターデータを取得します。
        /// </summary>
        /// <returns></returns>
        public string GetFooter(DirectoryAnalyzeData srcData)
        {
            StringBuilder header = new StringBuilder();
            header.Append("</body>");
            header.Append(Environment.NewLine);
            header.Append("</html>");
            header.Append(Environment.NewLine);

            return header.ToString();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// ディレクトリ内の情報を取得します。
        /// </summary>
        public void ReadDirectoryInnerInfo(IWin32Window owner)
        {
            analyzeData = null;

            Thread thread = new Thread(Execute);
            thread.Start();

            progressForm.ShowDialog(owner);
            thread.Join();
            progressForm.Dispose();
        }
Ejemplo n.º 3
0
        /// <summary>
        /// HTMLへ変換
        /// </summary>
        /// <param name="srcData">変換元データ</param>
        /// <returns></returns>
        public string[] Parse(DirectoryAnalyzeData srcData, bool isAllData)
        {
            List<string> parseData = new List<string>();

            if (isAllData == true)
            {
                string path = srcData.FullName;
                parseData.Add("<a name='" + path.Replace('\\', '/') + "'>");
                parseData.Add(path);
                parseData.Add("</a>");
                parseData.Add("<table border='1px'>");

                List<string> header = new List<string>();

                foreach (FolderWatcherSetting.FileItemKind fileItem in FolderWatcherSetting.Instance.FileItemList)
                {
                    header.Add(FolderWatcherSetting.GetString(fileItem));
                }
                parseData.Add(Parse(header, null, " bgcolor='#cccccc'"));

                // 内部フォルダ
                foreach (DirectoryAnalyzeData data in srcData.SubDirectoryData)
                {
                    parseData.AddRange(Parse(data, false));
                }

                // 内部ファイル
                foreach (DirectoryAnalyzeData data in srcData.FileData)
                {
                    parseData.AddRange(Parse(data, false));
                }
                parseData.Add("</table>");
                parseData.Add("<br>");

                foreach (DirectoryAnalyzeData data in srcData.SubDirectoryData)
                {
                    parseData.AddRange(Parse(data, isAllData));
                }
            }
            else
            {
                parseData.Add(Parse(srcData.ToArray(FolderWatcherSetting.Instance.FileItemList), srcData, string.Empty));
            }

            return parseData.ToArray();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// ヘッダーデータを取得します。
        /// </summary>
        /// <param name="title"></param>
        /// <returns></returns>
        public string GetHeader(DirectoryAnalyzeData srcData)
        {
            StringBuilder header = new StringBuilder();
            header.Append("<html>");
            header.Append(Environment.NewLine);
            header.Append("<head>");
            header.Append(Environment.NewLine);
            header.Append("<title>");
            header.Append(srcData.Name);
            header.Append("</title>");
            header.Append(Environment.NewLine);
            header.Append("</head>");
            header.Append(Environment.NewLine);
            header.Append("<body>");
            header.Append(Environment.NewLine);

            return header.ToString();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 文字列配列のデータをCSV形式に変換を行います。
        /// </summary>
        /// <param name="srcData">変換元のデータ</param>
        public string[] Parse(DirectoryAnalyzeData srcData, bool isAllData)
        {
            List<string> parseData = new List<string>();

            if (isAllData == true)
            {
                // 内部ファイル
                List<DirectoryAnalyzeData> subFileList = new List<DirectoryAnalyzeData>();
                subFileList.AddRange(srcData.FileData);
                subFileList.AddRange(srcData.SubDirectoryData);
                for (int subIndex = 0; subIndex < subFileList.Count; subIndex++)
                {
                    string line = string.Empty;
                    if (subIndex < subFileList.Count -1)
                    {
                        line = " |-";
                    }
                    else
                    {
                        line = " L ";
                    }
                    parseData.Add(line + Parse(subFileList[subIndex], false)[0]);

                    string[] subFileData = Parse(subFileList[subIndex], true);
                    foreach (string subData in subFileData)
                    {
                        line = "   ";
                        if (subIndex < subFileList.Count - 1)
                        {
                            line = " | ";
                        }
                        parseData.Add(line + subData);
                    }
                }
            }
            else
            {
                CsvParser csvParser = new CsvParser('\t');
                parseData.AddRange(csvParser.Parse(srcData, false));
            }

            return parseData.ToArray();
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 検索対象とマッチするか判断します。
        /// </summary>
        /// <param name="targetWord">調べる文字</param>
        /// <returns>マッチした場合は true、それ以外の場合は false</returns>
        public bool Match(String targetWord, DirectoryAnalyzeData.FileTypeKind fileType)
        {
            if (targetKind != TargetKind.All)
            {
                if (fileType == DirectoryAnalyzeData.FileTypeKind.File && targetKind != TargetKind.File)
                {
                    return true;
                }
                else if (fileType == DirectoryAnalyzeData.FileTypeKind.Directory && targetKind != TargetKind.Folder)
                {
                    return true;
                }
            }

            return Match(targetWord);
        }
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="file">解析ファイル</param>
        /// <param name="progressData">進捗データ</param>
        /// <param name="rootData">大本の親フォルダの解析データ</param>
        public DirectoryAnalyzeData(FileSystemInfo file, ref ProgressForm.ProgressData progressData, DirectoryAnalyzeData rootData)
        {
            if (isCancel == true)
            {
                return;
            }

            this.rootData = rootData;
            if (rootData == null)
            {
                this.rootData = this;
            }

            FileAttributes attribute = file.Attributes;
            if ((attribute & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)
            {
                // リパースポイントの場合は無視
                return;
            }

            FileSystemSecurity fileSecurity = null;
            // ファイルタイプの判別
            try
            {
                this.path = file.FullName;

                if ((attribute & FileAttributes.Directory) == FileAttributes.Directory)
                {
                    this.fileType = FileTypeKind.Directory;

                    fileSecurity = ((DirectoryInfo)file).GetAccessControl();
                }
                else
                {
                    this.fileType = FileTypeKind.File;
                    this.size = ((FileInfo)file).Length;

                    fileSecurity = ((FileInfo)file).GetAccessControl();
                }
            }
            catch
            {
                // アクセス拒否の場合
                isAccessDeny = true;
            }

            try
            {
                this.owerName = string.Empty;
                if (fileSecurity != null)
                {
                    NTAccount account = (NTAccount)fileSecurity.GetOwner(typeof(NTAccount));
                    this.owerName = account.ToString();
                }
            }
            catch
            {
            }

            this.name = file.Name;
            this.extention = Path.GetExtension(this.path).ToLower();
            this.creationTime = file.CreationTime;
            this.lastModifyDate = file.LastWriteTime;
            this.lastAccessTime = file.LastAccessTime;
            this.isReadOnly = (attribute & FileAttributes.ReadOnly) == FileAttributes.ReadOnly;
            this.isHidden = (attribute & FileAttributes.Hidden) == FileAttributes.Hidden;

            this.files = new List<DirectoryAnalyzeData>();
            this.directories = new List<DirectoryAnalyzeData>();

            progressData.currentFileName = this.name;
            progressData.targetFolderName = Path.GetDirectoryName(path);
            progressData.progress++;

            if (this.FileType == FileTypeKind.Directory)
            {
                // ディレクトリの場合
                // 中のファイルの情報を取得
                try {
                    progressData.maxProgress += ((DirectoryInfo)file).GetFileSystemInfos().Length;

                    foreach (DirectoryInfo subDir in ((DirectoryInfo)file).GetDirectories())
                    {
                        DirectoryAnalyzeData data = new DirectoryAnalyzeData(subDir, ref progressData, this.rootData);

                        if (string.IsNullOrEmpty(data.Name) == false)
                        {
                            directories.Add(data);
                        }
                    }

                    foreach (FileInfo subFile in ((DirectoryInfo)file).GetFiles())
                    {
                        DirectoryAnalyzeData data = new DirectoryAnalyzeData(subFile, ref progressData, this.rootData);

                        if (string.IsNullOrEmpty(data.Name) == false)
                        {
                            files.Add(data);
                        }
                    }
                }
                catch
                {
                    // アクセス拒否の場合
                    isAccessDeny = true;
                }
            }

            this.attachData = new FileAttachData(path, isHidden, isAccessDeny);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 文字列配列のデータをCSV形式に変換を行います。
        /// </summary>
        /// <param name="srcData">変換元のデータ</param>
        /// <param name="srcAnaData">変換元データ</param>
        /// <param name="headerOption">ヘッダー行オプション</param>
        public string Parse(List<string> srcData, DirectoryAnalyzeData srcAnaData, string headerOption)
        {
            StringBuilder destData = new StringBuilder();
            destData.Append("<tr" + headerOption + ">");
            destData.Append(Environment.NewLine);
            FolderWatcherSetting.FileItemKind[] itemList = FolderWatcherSetting.Instance.FileItemList;

            for (int dataIndex = 0; dataIndex < srcData.Count; dataIndex++)
            {
                destData.Append("<td>");

                bool isDirectoryLink = itemList[dataIndex] == FolderWatcherSetting.FileItemKind.Name
                        && srcAnaData != null && srcAnaData.FileType == DirectoryAnalyzeData.FileTypeKind.Directory;
                if (isDirectoryLink == true)
                {
                    destData.Append("<a href='#" + srcAnaData.FullName.Replace('\\', '/') + "'>");
                }
                destData.Append(srcData[dataIndex]);
                if (isDirectoryLink == true)
                {
                    destData.Append("</a>");
                }
                destData.Append("</td>");
                destData.Append(Environment.NewLine);
            }

            destData.Append("</tr>");

            return destData.ToString();
        }
Ejemplo n.º 9
0
        /// <summary>
        /// フォルダオープンイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        private void folderViewControl1_OpenFolderEvent(object sender, DirectoryAnalyzeData[] data)
        {
            if (data == null || data.Length <= 0)
            {
                SetOpenDirectoryMenu(false);

                this.Text = Application.ProductName;
            }
            else
            {
                SetOpenDirectoryMenu(true);

                this.directoryPath = data[0].FullName;
                FolderWatcherSetting setting = FolderWatcherSetting.Instance;
                setting.LastOpenFolder = directoryPath;

                this.Text = String.Format(formTextFormat, this.directoryPath);
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 文字列配列のデータをCSV形式に変換を行います。
        /// </summary>
        /// <param name="srcData">変換元のデータ</param>
        public string[] Parse(DirectoryAnalyzeData srcData, bool isAllData)
        {
            List<string> parseData = new List<string>();

            parseData.Add(Parse(srcData.ToArray(FolderWatcherSetting.Instance.FileItemList)));

            if (isAllData == true)
            {
                foreach (DirectoryAnalyzeData data in srcData.SubDirectoryData)
                {
                    parseData.AddRange(Parse(data, isAllData));
                }

                foreach (DirectoryAnalyzeData data in srcData.FileData)
                {
                    parseData.AddRange(Parse(data, isAllData));
                }
            }

            return parseData.ToArray();
        }
Ejemplo n.º 11
0
 /// <summary>
 /// ヘッダーデータを取得します。
 /// </summary>
 /// <param name="title"></param>
 /// <returns></returns>
 public string GetHeader(DirectoryAnalyzeData srcData)
 {
     return string.Empty;
 }
Ejemplo n.º 12
0
        /// <summary>
        /// フォルダの情報を取得
        /// </summary>
        private void Execute()
        {
            if (currentDirectory.Exists == false)
            {
                return;
            }

            progressData.maxProgress = 1;

            DirectoryAnalyzeData.Clear();
            analyzeData = new DirectoryAnalyzeData(currentDirectory, ref progressData);

            if (progressForm.Canceled == true)
            {
                analyzeData = null;
            }

            progressData.progress = progressData.maxProgress;
        }
Ejemplo n.º 13
0
        /// <summary>
        /// アイテム選択イベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        private void folderListControl1_SelectedItem(object sender, DirectoryAnalyzeData[] dataArray)
        {
            selectionAnalyzeDataList = dataArray;

            if (dataArray == null || dataArray.Length <= 0)
            {
                // 何も選択されていない場合
                fileIconpictureBox.Image = null;
                flowLayoutPanel1.Visible = false;
                toolTip.SetToolTip(fileIconpictureBox, null);
                return;
            }

            fileIconpictureBox.Image = dataArray[0].LargeIcon;

            if (dataArray.Length <= 1)
            {
                // 一つのファイルが選択されている場合は、
                // そのファイルの情報を表示
                fileNameLabel.Text = dataArray[0].Name;
                fileTypeLabel.Text = dataArray[0].Kind;
                toolTip.SetToolTip(fileIconpictureBox, dataArray[0].FullName);
            }
            else
            {
                // 複数ファイルが選択されている場合は、
                // 選択されたファイル数を表示
                fileNameLabel.Text = string.Format(Properties.Resources.SelectItemsMessage, dataArray.Length);
                toolTip.SetToolTip(fileIconpictureBox, Path.GetDirectoryName(dataArray[0].FullName));
            }

            // それぞれの最大最小値を取得して表示
            DateTime minLMD = dataArray[0].LastModifyDate;
            DateTime maxLMD = dataArray[0].LastModifyDate;
            DateTime minCreate = dataArray[0].CreationDate;
            DateTime maxCreate = dataArray[0].CreationDate;
            long totalSize = 0;
            foreach (DirectoryAnalyzeData data in dataArray)
            {
                // 最終更新日付
                if (minLMD > data.LastModifyDate)
                {
                    minLMD = data.LastModifyDate;
                }
                if (maxLMD < data.LastModifyDate)
                {
                    maxLMD = data.LastModifyDate;
                }

                // サイズ
                totalSize += data.Size;

                // 作成日付
                if (minCreate > data.CreationDate)
                {
                    minCreate = data.CreationDate;
                }
                if (maxCreate < data.CreationDate)
                {
                    maxCreate = data.CreationDate;
                }
            }

            // 最大最小が同じならそのままの値を表示
            if (minLMD == maxLMD)
            {
                lastWriteDateLabel.Text = minLMD.ToString();
            }
            else
            {
                lastWriteDateLabel.Text = string.Format(Properties.Resources.FromToDate, minLMD, maxLMD);
            }

            sizeLabel.Text = DataSize.GetRegularSize(totalSize);

            if (minCreate == maxCreate)
            {
                createLabel.Text = minCreate.ToString();
            }
            else
            {
                createLabel.Text = string.Format(Properties.Resources.FromToDate, minCreate, maxCreate);
            }

            flowLayoutPanel1.Visible = true;
        }
Ejemplo n.º 14
0
 /// <summary>
 /// 指定されたデータのノードを選択します。
 /// </summary>
 /// <param name="analyzeData">解析データ</param>
 public void SelectNode(DirectoryAnalyzeData analyzeData)
 {
     folderListControl.SelectNode(analyzeData);
 }
Ejemplo n.º 15
0
        /// <summary>
        /// 開く
        /// </summary>
        /// <param name="path">開くフォルダパス</param>
        public void Open(String path)
        {
            DirectoryAnalyzeData[] openDirectoryData = null;

            // スレッドを発生させる
            // D&D時にフォルダが固まるため
            Thread process = new Thread(
            delegate()
            {
                if (this.IsHandleCreated)
                {
                    this.Invoke((MethodInvoker)delegate()
                    {
                        if (folderListControl.GetDirectoryInnerInfo(path) == true)
                        {
                            openDirectoryData = new DirectoryAnalyzeData[] { folderListControl.AnalyzeData };
                        }

                        if (OpenFolderEvent != null)
                        {
                            OpenFolderEvent(this, openDirectoryData);
                        }
                    });
                }
            });
            process.Start();
        }
Ejemplo n.º 16
0
 /// <summary>
 /// ヘッダーデータを取得します。
 /// </summary>
 /// <param name="title"></param>
 /// <returns></returns>
 public string GetHeader(DirectoryAnalyzeData srcData)
 {
     return srcData.FullName;
 }