Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
            });
        }