【问题标题】:Directory.GetFiles: how to get only filename, not full path? [duplicate]Directory.GetFiles:如何只获取文件名,而不是完整路径? [复制]
【发布时间】:2012-09-13 12:20:38
【问题描述】:

可能重复:
How to get only filenames within a directory using c#?

使用 C#,我想获取文件夹中的文件列表。
我的目标:["file1.txt", "file2.txt"]

所以我写了这个:

string[] files = Directory.GetFiles(dir);

不幸的是,我得到了这个输出:["C:\\dir\\file1.txt", "C:\\dir\\file2.txt"]

之后我可以去掉不需要的“C:\dir\”部分,但有没有更优雅的解决方案?

【问题讨论】:

    标签: c# filepath getfiles


    【解决方案1】:

    您可以使用System.IO.Path.GetFileName 来执行此操作。

    例如,

    string[] files = Directory.GetFiles(dir);
    foreach(string file in files)
        Console.WriteLine(Path.GetFileName(file));
    

    虽然您可以使用FileInfo,但它比您已经使用的方法(仅检索文件路径)要重得多。所以我建议你坚持使用GetFiles,除非你需要FileInfo类的额外功能。

    【讨论】:

    • string[] files = Directory.GetFiles(dir).Select(file => Path.GetFileName(file)).ToArray();
    • @贾斯汀var files = Directory.GetFiles(dir).Select(Path.GetFileName);
    【解决方案2】:

    试试,

      string[] files =  new DirectoryInfo(dir).GetFiles().Select(o => o.Name).ToArray();
    

    以上行可能会抛出 UnauthorizedAccessException。要处理此检查,请查看以下链接

    C# Handle System.UnauthorizedAccessException in LINQ

    【讨论】:

      【解决方案3】:

      看看使用FileInfo.Name Property

      类似

      string[] files = Directory.GetFiles(dir); 
      
      for (int iFile = 0; iFile < files.Length; iFile++)
          string fn = new FileInfo(files[iFile]).Name;
      

      也看看使用DirectoryInfo ClassFileInfo Class

      【讨论】:

        【解决方案4】:

        使用它只获取文件名。

        Path.GetFileName(files[0]);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-01
          • 2012-12-29
          • 1970-01-01
          • 2011-02-12
          • 2012-10-20
          • 2013-07-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多