使用递归和string.split拆分目录

时间:2014-02-12 01:58:43

标签: c#

这是我的问题。我正在使用C#,我应该设计一个运行目录并列出其中所有子目录和文件的程序。我已经得到了基本代码,如下所示:

namespace DirectorySearch
{
    class DirectorySearch
    {
        const string PATH = @"C:\Directory Search";

        static void Main(string[] args)
        {
            DirSearch(PATH);
        }

        static void DirSearch(string dir)
        {
            try
            {
                foreach (string f in Directory.GetFiles(dir))
                    Console.WriteLine(f);
                foreach (string d in Directory.GetDirectories(dir))
                {
                    Console.WriteLine(d);
                    DirSearch(d);
                }

            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

我遇到的问题是我应该使用stringName.Split('/')。最后输出全部在一条直线上,但我不知道将它放在代码中的哪个位置。输出应该看起来像:

C:\Directory Search
  File1.txt
  File2.txt
    Folder1
    Folder2
      File3.txt
    Folder3

等等......我很确定在弄清楚如何拆分它们之后,我可以弄清楚如何使标签工作。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

你只需要使用Path.GetFilename返回目录名(对于目录)或文件名,扩展名为

foreach (string f in Directory.GetFiles(dir))
        Console.WriteLine(Path.GetFileName(f));

foreach (string d in Directory.GetDirectories(dir))
{
     Console.WriteLine(Path.GetFileName(d));
     DirSearch(d);
}

答案 1 :(得分:1)

试试这个

Console.WriteLine(f.Split('\\').Last());

答案 2 :(得分:1)

我不确定你是否在寻找这样的东西,但你可以试试这段代码

namespace DirectorySearch
{
    class DirectorySearch
    {
        const string PATH = @"C:\Directory Search";

        static void Main(string[] args)
        {
            Console.WriteLine(PATH);
            DirSearch(PATH);
        }

        static void DirSearch(string dir, int depth = 1)
        {
            try
            {
                string indent = new string('\t', depth);
                foreach (string f in Directory.GetFiles(dir))
                    Console.WriteLine(indent + f.Split('\\').Last());//using split
                    //Console.WriteLine(indent + Path.GetFileName(f));//using Get File name

                foreach (string d in Directory.GetDirectories(dir))
                {
                    Console.WriteLine(indent + d.Split('\\').Last()); //using split
                    //Console.WriteLine(indent + Path.GetFileName(d)); //using Get File name
                    DirSearch(d, depth++);
                }

            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

希望这能帮到你!