Пример #1
0
        /// <summary>
        /// ディレクトリーの中を全部実行。
        /// </summary>
        /// <param name="directoryLikeUmbrella">このディレクトリーの下をフラットにする。このディレクトリー自身は残す。</param>
        public static void GoFlat(string directoryLikeUmbrella)
        {
            Trace.WriteLine($"{LogHelper.Stamp}GoFlat  : {directoryLikeUmbrella}.");

            // 傘の下の中間ディレクトリーたち。こいつらが消える。
            IEnumerable <string> intermediateDirectories =
                System.IO.Directory.EnumerateDirectories(
                    directoryLikeUmbrella, "*", System.IO.SearchOption.TopDirectoryOnly);

            foreach (var intermediateDir in intermediateDirectories)
            {
                // 再帰呼出し。
                PathFlat.VisitIntermadiateDirectory(intermediateDir);
            }

            // 傘の直下のファイルは既にフラットなのでやる必要なし。
            // ここまでで、フラットになっている。

            /*
             * // ファイルの頭に、傘を付けていく。
             * Trace.WriteLine($"{LogHelper.Stamp}GoRename: {directoryLikeUmbrella}.");
             * IEnumerable<string> fileNames =
             *  System.IO.Directory.EnumerateFiles(
             *      directoryLikeUmbrella, "*", System.IO.SearchOption.TopDirectoryOnly);
             * foreach (var fileName in fileNames)
             * {
             *  // 親ディレクトリーの下に、親ディレクトリーの名前と、主体のファイル名を $% でくっつけたものを置く。
             *  // C#のメソッド名は、ノード名なのか、フルパスなのか、はっきりわかるように名付けてほしい。最後のノード名は、ファイル名を取るメソッドで代用した。
             *  var joinedName = $"{directoryLikeUmbrella}\\{Path.GetFileName(directoryLikeUmbrella)}$%{Path.GetFileName(fileName)}";
             *
             *  // リネーム☆ 衝突したら上書き。
             *  new TraceableFile(fileName).Move(new TraceableFile(joinedName), true);
             * }
             */
        }
Пример #2
0
        /// <summary>
        /// 再帰サーチ。
        /// </summary>
        /// <param name="intermediateDir">消えていく中間ディレクトリー。</param>
        private static void VisitIntermadiateDirectory(string intermediateDir)
        {
            // もっと中間ディレクトリーたち。
            IEnumerable <string> moreIntermediateDirectories =
                System.IO.Directory.EnumerateDirectories(
                    intermediateDir, "*", System.IO.SearchOption.TopDirectoryOnly);

            foreach (var moreIntermediateDir in moreIntermediateDirectories)
            {
                // 再帰呼出し。
                PathFlat.VisitIntermadiateDirectory(moreIntermediateDir);
            }

            // この階層のファイル。これを残す。
            IEnumerable <string> files =
                System.IO.Directory.EnumerateFiles(
                    intermediateDir, "*", System.IO.SearchOption.TopDirectoryOnly);

            foreach (var file in files)
            {
                PathFlat.DeleteParentDirectoryByMerge(new TraceableFile(file));
            }
        }