【问题标题】:C# get file paths of just files with no extensionsC#仅获取没有扩展名的文件的文件路径
【发布时间】:2014-06-05 16:56:59
【问题描述】:

我想要获取一个字符串数组,其中包含没有扩展名的文件的路径。如果有帮助,它们是没有扩展名的二进制文件。

例如,我正在从文件夹/test/ 中加载一组文件路径

我只想要没有扩展名的路径和文件名(所以没有.txt,没有.csv,没有.*)

/test/dontWant.txt

/test/dontWant.csv

/test/doWant

如果我这样做:

String[] paths = Directory.GetFiles(fDir, "*.*", SearchOption.AllDirectories);

我当然会在这些目录中获取所有内容。

如果我再尝试:

String[] paths= Directory.GetFiles(fDir, "*", SearchOption.AllDirectories); 

我仍然会得到该目录中的所有内容。

有没有办法只获取那些没有扩展名的文件?


使用"*." 确实有效,但我不知道为什么我一开始没有尝试。

我应该一直使用EnumerateFiles 开始。

【问题讨论】:

  • 试试String[] paths = Directory.GetFiles(fDir, "*.", SearchOption.AllDirectories);
  • @Grundy 不。那是任何以点结尾的文件名。我不知道有这样的文件!
  • @tnw,你试试看???
  • @是的,它可以工作:-),因为没有扩展名的文件名为“name”。
  • @Grundy 有趣,老实说,我没想到它会起作用。只是自己尝试了一下,它确实如此。酷

标签: c# path getfiles


【解决方案1】:

你可以试试这个通配符

String[] paths = Directory.GetFiles(fDir, "*.", SearchOption.AllDirectories);

您也可以将此通配符与Directory.EnumerateFiles一起使用

Directory.EnumerateFiles(fDir, "*.", SearchOption.AllDirectories);

【讨论】:

    【解决方案2】:

    这会有所帮助:

    var filesWithoutExtension = System.IO.Directory.GetFiles(@"D:\temp\").Where(filPath => String.IsNullOrEmpty(System.IO.Path.GetExtension(filPath)));
    foreach(string path in filesWithoutExtension)
    {
        Console.WriteLine(path);
    }
    

    它将仅返回指定目录中的所有不带扩展名的文件。如果您想包含所有必须使用的子目录:System.IO.Directory.GetFiles(@"D:\temp\", "*", SearchOption.AllDirectories)。

    更新
    正如大家所建议的,最好使用Directory.EnumerateFiles,因为它消耗的内存更少。

    【讨论】:

    • 这段代码像老板一样工作。刚刚在控制台应用程序中对其进行了测试。
    • EnumerateFiles 过程中创建目录不好。
    【解决方案3】:

    您需要对其进行第二遍过滤。

    //If you are using .NET 3.5 you can still use GetFiles, EnumerateFiles will just use less ram.
    String[] paths = Directory.EnumerateFiles(fDir, "*.*", SearchOption.AllDirectories)
                              .Where(file => Path.GetFileName(file) == Path.GetFileNameWithoutExtension(file))
                              .ToArray();
    

    因此,它会将您的文件路径传递给GetFileName 和GetFileNameWithoutExtension,如果它们都返回相同的字符串,则它将结果包含在数组中。

    【讨论】:

    • +1 为Directory.EnumerateFiles 并使用更少的内存。
    • EnumerateFiles 过程中创建目录不好。
    【解决方案4】:

    作为 aleksey.berezan 的答案的替代方案,您可以在 .NET 4+ 中执行以下操作。 EnumerateFiles 将返回在目录树中遍历的文件。

    foreach(var file in Directory.EnumerateFiles(fDir, "*.*", SearchOption.AllDirectories).Where(s => string.IsNullOrEmpty(Path.GetExtension(s))))
    {
    
    }
    

    【讨论】:

    • EnumerateFiles 过程中创建目录不好。
    猜你喜欢
    • 2014-06-06
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2023-03-10
    相关资源
    最近更新 更多