/// <summary> /// コンストラクタ /// </summary> /// <param name="directory">対象ディレクトリ</param> public DirectoryAnalyzer(DirectoryInfo directory) { this.currentDirectory = directory; this.progressData = new ProgressForm.ProgressData(); this.progressForm = new ProgressForm(GetProgressValue); }
/// <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> /// コンストラクタ /// </summary> /// <param name="path">ファイルパス</param> /// <param name="progressData">進捗データ</param> public DirectoryAnalyzeData(FileSystemInfo file, ref ProgressForm.ProgressData progressData) : this(file, ref progressData, null) { }