如何查找和使用Directory.GetFiles的正确路径?

时间:2016-03-08 15:11:15

标签: c#

我想从特定文件夹及其子目录返回文件名,但此文件夹可以存在于不同的路径,具体取决于驱动器和Windows版本,例如:

  • C:\ Program Files \ MyApp

  • D:\ Program Files \ MyApp

  • E:\ Program Files \ MyApp

  • F:\ Program Files \ MyApp

  • C:\ Program Files(x86)\ MyApp

  • D:\ Program Files(x86)\ MyApp

  • E:\ Program Files(x86)\ MyApp

  • F:\ Program Files(x86)\ MyApp

(此文件夹只能存在于其中一个路径中。)

这是我尝试过的:

Directory.GetFiles("path", "thefiles", SearchOption.AllDirectories)

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您正在寻找SpecialFolder(https://msdn.microsoft.com/en-us/library/system.environment.specialfolder)枚举。以下是如何使用它的示例:

Console.WriteLine("ProgramFilesX86: {0}", Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86));
Console.WriteLine("ProgramFiles: {0}", Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles));

然后,只需连接项目的目录。

您还可以获取可执行文件的BaseDirectory:

Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);

如果这不是您想要的,请更详细地解释您的问题,因为它不够详细。

答案 1 :(得分:-1)

如果您想使用Directory.GetFiles("path", "thefiles", SearchOption.AllDirectories)的结果,那么我可能会这样做(逗号分开并在文件夹的“列表”中添加引号):

List<string> foldersToSearch = new List<string>(){C:\Program Files\MyApp

D:\Program Files\MyApp

E:\Pro...

F:\

G:\

H:\

goes on and;

C:\Program Files (x86)\MyApp

D:\Program Files (x86)\MyApp

E:..

F:\

G:\

H:\

I:\};

List<string> filesInSpecificFolder = new List<string>();    

foreach (var folderToSearch in foldersToSearch)
{
    foreach (var file in Directory.GetFiles(folderToSearch, "thefiles", SearchOption.AllDirectories))
    {
        if (Path.GetDirectoryName(file) == "specificFolder")
        { filesInSpecificFolder.Add(file); }
    }
}