有没有办法在C#中只用它的名字来查找文件?

我们现在使用absolut path或relatvie路径在我们的C#应用​​程序中查找文件。 如果文件位于当前工作目录下或其中一个“路径”下,是否有办法仅通过其名称查找文件?

使用绝对值并不好并且使用相对路径不够好,因为我们可能通过重命名或移动项目文件夹来更改项目结构。 如果我们的代码可以自动搜索当前工作目录,其子文件夹和搜索系统路径,那将更加灵活。

谢谢,

试试这个:

string target = "yourFilenameToMatch"; string current = Directory.GetCurrentDirectory(); // 1. check subtree from current directory matches=Directory.GetFiles(current, target, SearchOption.AllDirectories); if (matches.Length>0) return matches[0]; // 2. check system path string systemPath = Environment.GetEnvironmentVariable("PATH"); char[] split = new char[] {";"}; foreach (string nextDir in systemPath.Split(split)) { if (File.Exists(nextDir + '\\' + target) { return nextDir; } } return String.Empty; 

您可以轻松地构建递归函数来为您执行此操作。 查看System.IO下的Directory.GetDirectories和Directory.GetFiles

您可以为要在其中搜索文件的每个根文件夹调用Directory.GetFiles 。 参数searchOption允许您指定搜索操作是查找所有子目录还是仅查看指定的目录。 例如:

 public string GetFileName(string[] folders,string fileName) { string[] filePaths; foreach(var folder in folders) { filePaths=Directory.GetFiles(folder,fileName,SearchOption.AllDirectories) if (filePaths.Lenght>0) return filePaths[0]; } } 

试试这个:

 Directory.EnumerateFiles(pathInWhichToSearch, fileNameToFind, SearchOption.AllDirectories); 

而且,您需要使用:

 using System.IO; 

在你的class上。

这将在pathInWhichToSearch所有子目录中搜索名为fileNameToFind的文件(它也可以是一个模式 – 如*.txt ),并将结果作为IEnumerable返回,其中包含已找到文件的完整路径。

你可以使用exe的目录

Path.GetDirectoryName(Application.ExecutablePath);

示例代码: http : //www.csharp-examples.net/get-application-directory/

然后,您可以使用递归从那里搜索文件夹。 这是一篇关于递归搜索文件的好文章: http : //support.microsoft.com/kb/303974