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

问题描述:

我想从一个特定的文件夹及其子目录返回文件名,但该文件夹可以在不同的驱动器和Windows版本的不同路径上存在,例如:如何查找和使用Directory.GetFiles的正确路径?

  • C:\ Program Files文件\ MyApp的

  • d:\ Program Files文件\ MyApp的

  • E:\ Program Files文件\ MyApp的

  • F:\ Program Files文件\ MyApp的

  • C:\ Program Files文件(x86)的\ MyApp的

  • d:\程序文件(x86)\ MyApp的

  • E:\程序文件(x86)\ MyApp的

  • ˚F :\ Program Files文件(x86)的\ MyApp的

(此文件夹可以在只有其中的一个路径存在。)

这是我已经试过:

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

,所以你想知道的[在您的EXE正在运行?](http://*.com/questions/837488/how-can-i-get-the-applications-path-in-a-net-console-application) – Liam

+1

这不是我们得到使用以标记垃圾邮件问题,但您遵循网站规则。为此,你应该已经参加了[游览]并学会了[问]。如果你不喜欢遵守或不粗鲁,你必须忍受这样的评论和可能的国旗,直到被禁止。 – Olaf

+0

@MillieSmith:你也是。至少我不是故意这样做的。 – Olaf

如果我理解正确的话,你正在寻找的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); 

如果这不是你在找什么,那么请解释一下你的问题更多,因为它不够详细。

+0

完美!谢谢... Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)是我一直在寻找的。 –

如果你想使用的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); } 
    } 
} 
+0

@LordPermaximum这是更一般的情况。你需要程序文件目录的事实是由Tom A决定的,他读了你的思想,他的代码返回了获取这个特殊目录的* specific *的情况;你没有在你的文章中提到任何地方,你只是给了一个通用的文件夹列表,并且*它们中的一些恰好是程序文件目录。 – Quantic

+0

我想我用“......”和“继续”不能说清楚。我正在程序文件中搜索应用程序目录,但是我必须首先根据不同的Windows版本和驱动器找到适用于32位程序文件目录的正确路径。不过,您的解决方案可以用于“特定”文件夹的列表。我正是这个意思。顺便说一句,我没有让你失望。 –