dirtree
Quoc氏が作ってくれたもの。
class Program { static void Main(string[] args) { //Title - タイトル Console.Write("*****Hello dirtree*****\n"); //Get the current directory of application string scurdir=Directory.GetCurrentDirectory(); //Get the subdirectory list of selected directory string[] arrsubdir = Directory.GetDirectories(scurdir); //Output the results PrintValues(arrsubdir); } public static void PrintValues(Object[] myArr) { foreach (Object i in myArr) { //Print the values Console.Write("-> {0}\n", i); //recursive //Get the subdirectory list of selected directory string[] arrsubdir = Directory.GetDirectories(i.ToString()); //Output the results PrintValues(arrsubdir); } } }
ちょっとガッカリ。
ということでこれをアレンジしてWindowsのTreeコマンドっぽくしてくれないか?といってみた。
dirtree改訂版
class Program { private static IDirectorySep m_sep = new ExtensionDirectorySep(); static void Main(string[] args) { foreach (string cmdLine in System.Environment.GetCommandLineArgs()) { string up = cmdLine.ToUpper(); if (up == "/A") { m_sep = new AsciiDirectorySep(); } else if (up == "/?") { // stub Console.WriteLine("no implements option:{0}",up); } else if (up == "/F") { // stub Console.WriteLine("no implements option:{0}",up); } else { Console.WriteLine("no implements option:{0}",up); } } //Title - タイトル Console.Write("*****Hello dirtree*****\n"); //Get the current directory of application string scurdir=Directory.GetCurrentDirectory(); //Get the subdirectory list of selected directory string[] arrsubdir = Directory.GetDirectories(scurdir); //Output the results Console.WriteLine(scurdir); PrintValues(arrsubdir, ""); } public static void PrintValues(Object[] myArr, string sepStr) { if (myArr == null) return; for (int i=0; i<myArr.Length; i++) { //recursive //Get the subdirectory list of selected directory string[] arrsubdir = Directory.GetDirectories(myArr[i].ToString()); if (i == myArr.Length - 1) { Console.WriteLine( "{0}{1}{2}", sepStr, m_sep.endShowStr, new DirectoryInfo(myArr[i].ToString()).Name ); PrintValues(arrsubdir, sepStr + m_sep.endSepStr); } else { Console.WriteLine( "{0}{1}{2}", sepStr, m_sep.nextShowStr, new DirectoryInfo(myArr[i].ToString()).Name ); PrintValues(arrsubdir, sepStr + m_sep.nextSepStr); } } } } interface IDirectorySep { string endShowStr { get; } string nextShowStr { get; } string endSepStr { get; } string nextSepStr { get; } } sealed class ExtensionDirectorySep : IDirectorySep { #region IDirectorySep メンバ public string endShowStr { get { return "└─"; } } public string nextShowStr { get { return "├─"; } } public string endSepStr { get { return " "; } } public string nextSepStr { get { return "| "; } } #endregion } class AsciiDirectorySep : IDirectorySep { #region IDirectorySep メンバ public string endShowStr { get { return "\\--"; } } public string nextShowStr { get { return "+--"; } } public string endSepStr { get { return " "; } } public string nextSepStr { get { return "| "; } } #endregion }
前日に見てしまったMr.R氏ソースコードの印象が強く、もろパク気味になってしまった。テストに時間がかかったので私が30分くらいで作った。30分もかかった自分にがっくし。
Quoc氏は出来なかった。少し不安になってくるが、まあこんなもんかな、という感じ。