有没有办法在C#中只通过其名称查找文件?

时间:2010-09-20 19:56:14

标签: c# .net .net-3.5

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

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

感谢,

5 个答案:

答案 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

相关问题