我们现在使用absolut path或relatvie路径在我们的C#应用程序中查找文件。如果文件位于当前工作目录下或其中一个“路径”下,是否可以通过其名称查找文件?
使用绝对值并不好并且使用相对路径不够好,因为我们可能通过重命名或移动项目文件夹来更改项目结构。如果我们的代码可以自动搜索当前工作目录,其子文件夹和搜索系统路径,那将更加灵活。
感谢,
答案 0 :(得分:3)
您可以轻松构建递归函数来为您执行此操作。查看System.IO
下的Directory.GetDirectories和Directory.GetFiles答案 1 :(得分:1)
您可以为要搜索该文件的每个根文件夹调用Directory.GetFiles。参数searchOption允许您指定搜索操作是查找所有子目录还是仅查看指定的目录。 E.g:
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];
}
}
答案 2 :(得分:1)
试试这个:
Directory.EnumerateFiles(pathInWhichToSearch, fileNameToFind, SearchOption.AllDirectories);
而且,您需要使用:
using System.IO;
在班上。
这将在pathInWhichToSearch
的所有子目录中搜索名称为fileNameToFind
的文件(它也可以是一种模式,如*.txt
),并将结果返回为IEnumerable<string>
,并显示完整路径找到的文件。
答案 3 :(得分:1)
试试这个:
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;
答案 4 :(得分:0)
您可以使用
获取exe的目录 Path.GetDirectoryName(Application.ExecutablePath);
示例代码:http://www.csharp-examples.net/get-application-directory/
然后,您可以使用递归从那里搜索文件夹。这是一篇关于递归搜索文件的好文章: http://support.microsoft.com/kb/303974