private static void DigDir(string targetDir) { // 対象フォルダ内ファイル探索 string[] files = Directory.GetFiles(targetDir, "*", SearchOption.TopDirectoryOnly); // ディクショナリ変換(ファイル当否はすべて真) Dictionary <string, bool> topDirFiles = files.ToDictionary(n => n, n => true); // 対象フォルダ内フォルダ探索 string[] dirs = Directory.GetDirectories(targetDir, "*", SearchOption.TopDirectoryOnly); // ディクショナリ変換(ファイル当否はすべて偽) Dictionary <string, bool> topDirDirs = dirs.ToDictionary(n => n, n => false); // ディレクトリとファイルの混合表示とするためディクショナリ結合 IEnumerable <KeyValuePair <string, bool> > topDirObj = topDirFiles.Concat(topDirDirs); // キー昇順にソート topDirObj = topDirObj.OrderBy(x => x.Key); // ディレクトリ名表示 Console.WriteLine(string.Format(FORMAT_DIR_NAME, Path.GetDirectoryName(targetDir))); // 対象オブジェクトループ foreach (KeyValuePair <string, bool> x in topDirObj) { // ファイル/フォルダ名称取得 string objName = Path.GetFileName(x.Key); // ファイルでない場合 if (!x.Value) { Console.WriteLine(FORMAT_OBJ_INFO, " ", "<DIR>", objName); continue; } // ハッシュ取得メソッド使用 string hash = GetHash.GetFileCheckSum(x.Key); Console.WriteLine(FORMAT_OBJ_INFO, hash, " ", objName); } // ファイル個数表示 Console.WriteLine(string.Format(FORMAT_PARENT_FILECOUNT, topDirFiles.Count)); // フォルダ個数表示 Console.WriteLine(string.Format(FORMAT_PARENT_DIRCOUNT, topDirDirs.Count)); // サブディレクトリフラグがオンの場合 if (Option.IsSubDirFlg) { // フォルダループ foreach (string x in dirs) { // 自身を回帰呼び出し DigDir(x); } } }
static void Main(string[] args) { // ねずみ返し_引数がない場合 if (args.Length <= 0) { Console.WriteLine("※本ファイルは単体で実行しないでください"); Console.WriteLine("終了します"); Console.ReadKey(); return; } // 引数ループメソッド使用 string targetArg = LoopArgs(args); // ヘルプオプションが存在する場合 if (Option.IsHelpFlg) { // ヘルプを表示して終了 Console.WriteLine(HELP); return; } // 対象がファイルの場合 if (File.Exists(targetArg)) { // ハッシュ取得メソッド使用 string hash = GetHash.GetFileCheckSum(targetArg); Console.WriteLine(FORMAT_OBJ_INFO, hash, " ", targetArg); } // 対象がフォルダの場合 if (Directory.Exists(targetArg)) { // フォルダ探索メソッド使用 DigDir(targetArg); } Console.ReadKey(); }