/// <summary> /// エンコーディングを変える。 /// 解凍した先のディレクトリを検索すること。 /// </summary> /// <returns>ループが回った回数。</returns> public static int ExecuteEncode() { // Trace.WriteLine($"{LogHelper.Stamp}Encode : '{LocationMaster.ExpandedDirectory.FullName}' directory."); var encodedCount = 0; // 指定ディレクトリ以下のファイルをすべて取得する IEnumerable <string> files = System.IO.Directory.EnumerateFiles( LocationMaster.ExpandedDirectory.FullName, "*", System.IO.SearchOption.AllDirectories); // Trace.WriteLine("Expanding..."); // 圧縮ファイルを 3つ 解凍する foreach (string file in files) { if (encodedCount > 3) { goto next; } if (EncodingPhase.EncodingOfTextFile(new TraceableFile(file))) { encodedCount++; } } next: // Trace.WriteLine($"{LogHelper.Stamp}End : Encoding."); return(encodedCount); }
/// <summary> /// Entry point. /// </summary> /// <param name="args">Command line arguments.</param> public static void Main(string[] args) { LogRotation.Logging(() => { // Command line arguments. var arguments = RawArguments.Load(args); Trace.WriteLine($"{LogHelper.Stamp}Expand : '{arguments.Expand}', Encode: '{arguments.Encode}', Convert: '{arguments.Convert}'."); // 同じフェーズをずっとやっていても1つも完成しないので、少しずつやって、ばらけさせる。 var expandedCount = 1; // ループの初回入るように。 var encodedCount = 0; var convertedCount = 0; var mergedCount = 0; var merged = false; // List<string> expansionOutputDirectories; // 処理が行われている間、繰り返す。 while (expandedCount + encodedCount + convertedCount > 0 || merged) { Trace.WriteLine($"{LogHelper.Stamp}Program : Running..."); // リセット。 expandedCount = 0; encodedCount = 0; convertedCount = 0; mergedCount = 0; merged = false; if (arguments.Expand) { // 解凍フェーズ。 expandedCount = ExpansionPhase.ExpandLittleIt(); } if (arguments.Encode) { // TODO フォルダーを探索して、棋譜のエンコーディングを変換。 encodedCount = EncodingPhase.ExecuteEncode(); } if (arguments.Convert) { // 棋譜RPM変換フェーズ。 convertedCount = ConvertSomeFilesToRpm(); } if (arguments.Merge) { // たまに行う程度。 //if (new System.Random().Next() % 3 == 0) //{ // JSON作成フェーズ。 (mergedCount, merged) = JamTapesfragFiles(false); //} } Trace.WriteLine($"{LogHelper.Stamp}Result : expandedCount: {expandedCount}, encodedCount: {encodedCount}, readCount: {convertedCount}, mergedCount: {mergedCount}."); } // 最後の余りに対応する1回。 { Trace.WriteLine($"{LogHelper.Stamp}Program : Last run..."); if (arguments.Expand) { // 解凍フェーズ。 expandedCount = ExpansionPhase.ExpandLittleIt(); } if (arguments.Encode) { // TODO フォルダーを探索して、棋譜のエンコーディングを変換。 EncodingPhase.ExecuteEncode(); } if (arguments.Convert) { // 棋譜RPM変換フェーズ。 convertedCount = ConvertSomeFilesToRpm(); } if (arguments.Merge) { // JSON作成フェーズ。 (mergedCount, merged) = JamTapesfragFiles(true); } Trace.WriteLine($"{LogHelper.Stamp}LAST : expandedCount: {expandedCount}, readCount: {convertedCount}, mergedCount: {mergedCount}."); } // 空の go のサブ・ディレクトリは削除。 { { // このディレクトリ以下のディレクトリをすべて取得する IEnumerable <string> subDirectories = System.IO.Directory.EnumerateDirectories(LocationMaster.InputDirectory.FullName, "*", System.IO.SearchOption.TopDirectoryOnly); foreach (string subDir in subDirectories) { DeleteEmptyDirectory(subDir); } } { // このディレクトリ以下のディレクトリをすべて取得する IEnumerable <string> subDirectories = System.IO.Directory.EnumerateDirectories(LocationMaster.EncodedDirectory.FullName, "*", System.IO.SearchOption.TopDirectoryOnly); foreach (string subDir in subDirectories) { DeleteEmptyDirectory(subDir); } } } int sleepSeconds = 60; Trace.WriteLine($"{LogHelper.Stamp}Finished: sleep={sleepSeconds} sec."); Thread.Sleep(sleepSeconds * 1000); }); }