Treeコマンドもどき(C#)

-- Index --

・Top

・Softwares

▼親父の独り言集

・Oracleデータベースに対する独り言集

▼VB.NETやC#に対する独り言集

・ご利用の前に
・Excel遅延バインディング読み書き高速化(C#)
・Excelデータ比較(C#)
・並列処理グループの直列化(C#)
→Treeコマンドもどき(C#)
・コマンドラインを配列に分割する(C#)
・相対パス取得(C#)
・ListViewのフォーカス行取得(VB.NET)
・DataGridViewでパスワードマスク

・我が家の家電事情について

いきさつ

treeコマンドもどきをC#で記述するにはどうすればよいでしょうか?
ネットで検索しても該当しない。ひょっとして需要無し??

参考ソース

/// Copyright(c) 2016 pakkin. All Rights Reserved.
/// [改訂履歴]
/// 2016.01.15 作成
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        private static ArrayList entries;
        private static void SearchEntries(string path, String tree = null)
        {
            if (tree == null)
            {
                entries = new ArrayList();
                entries.Add("ROOT : " + path);
                SearchEntries(path, "");
                return;
            }
            string[] fils = Directory.GetFiles(path, "*", SearchOption.TopDirectoryOnly);
            string[] dirs = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);
            for (int i = 0; i < fils.Length; i++) fils[i] = Path.GetFileName(fils[i]);
            for (int i = 0; i < dirs.Length; i++) dirs[i] = Path.GetFileName(dirs[i]);
            if (fils.Length > 1) Array.Sort(fils);
            if (dirs.Length > 1) Array.Sort(dirs);
            for (int i = 0; i < fils.Length + dirs.Length; i++)
            {
                string type = (i < fils.Length ? "F" : "D") + (tree.Length + 1).ToString("000");
                string enti = i < fils.Length ? fils[i] : dirs[i - fils.Length];
                string curr = i == fils.Length + dirs.Length - 1 ? "└" : "├";
                string next = i == fils.Length + dirs.Length - 1 ? " " : "|";
                entries.Add(type + " : " + tree + curr + enti);
                if (i >= fils.Length) SearchEntries(path + @"\" + enti, tree + next);
            }
        }
        static void Main(string[] args)
        {
            SearchEntries(@"C:\Program Files\WinMerge");
            Console.Write(string.Join(Environment.NewLine, entries.ToArray()));
            Console.ReadKey();
        }
    }
}

実行結果

うーん、再起呼び出し以外での手法が分からない。とりあえずこんな感じだと思います。


Copyright(c) 2014-2022 pakkin. All Rights Reserved.