/// <summary> /// 読取。 /// </summary> /// <param name="args">コマンドライン引数。</param> /// <returns>このオブジェクト。</returns> public static RawArguments Load(string[] args) { RawArguments instance = null; Parser.Default.ParseArguments <RawArguments>(args).WithParsed(ins => { // パース成功時 instance = (RawArguments)ins; }).WithNotParsed(err => { // パース失敗時 }); return(instance); }
/// <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); }); }