/// <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(); }
/// <summary> /// ディレクトリ内の情報を取得します。 /// </summary> public void ReadDirectoryInnerInfo(IWin32Window owner) { analyzeData = null; Thread thread = new Thread(Execute); thread.Start(); progressForm.ShowDialog(owner); thread.Join(); progressForm.Dispose(); }
/// <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(); }
/// <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(); }
/// <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(); }
/// <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); }
/// <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(); }
/// <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); } }
/// <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(); }
/// <summary> /// ヘッダーデータを取得します。 /// </summary> /// <param name="title"></param> /// <returns></returns> public string GetHeader(DirectoryAnalyzeData srcData) { return string.Empty; }
/// <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; }
/// <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; }
/// <summary> /// 指定されたデータのノードを選択します。 /// </summary> /// <param name="analyzeData">解析データ</param> public void SelectNode(DirectoryAnalyzeData analyzeData) { folderListControl.SelectNode(analyzeData); }
/// <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(); }
/// <summary> /// ヘッダーデータを取得します。 /// </summary> /// <param name="title"></param> /// <returns></returns> public string GetHeader(DirectoryAnalyzeData srcData) { return srcData.FullName; }