按文件名查找文件

时间:2014-04-11 11:00:04

标签: c# filepath

通过文件名查找文件然后返回其路径的最佳方法是什么?

e.g。

public string GetFilePath(string filename)
{
    // some work to get the path
    return filepath;
}

我试过这个但没有成功

public string GetFileContent(string filename)
{
    DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(@"c:\");
    FileInfo[] filesInDir = hdDirectoryInWhichToSearch.GetFiles("*" + filename + "*.*");

    foreach (FileInfo foundFile in filesInDir)
    {
        string fullName = foundFile.FullName;
        return fullName;
    }
    return "found nothing";
}

是否有最佳实践方法可以通过硬盘驱动器上的文件名查找文件?

4 个答案:

答案 0 :(得分:1)

试试这个:

Directory.GetFiles(@"c:\", filename, SearchOption.AllDirectories).FirstOrDefault()

答案 1 :(得分:1)

请试一试。

string[] files = Directory.GetFiles(dir);
foreach(string file in files)
{
    if(Path.GetFileName(file).Contains("Your filename"))
    {
      do stuffs...
    }
}

表现:

IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*",System.IO.SearchOption.AllDirectories);

string searchTerm = @"Visual Studio";

// Search the contents of each file. 
// A regular expression created with the RegEx class 
// could be used instead of the Contains method. 
// queryMatchingFiles is an IEnumerable<string>. 

var queryMatchingFiles =
from file in fileList
let fileText =Path.GetFileName(file)
where fileText.Contains(searchTerm)
select file.FullName;

答案 2 :(得分:0)

如果我正在查找文件并且我不知道该位置,那么我会使用bultin Windows Search

请参阅code samples页面,了解具体DSearch代码示例的示例。

  

DSearch代码示例演示了如何为a创建类   静态控制台应用程序使用。来查询Windows搜索   用于ISearchQueryHelper的Microsoft.Search.Interop程序集。

否则Directory类有内置辅助工具,例如Directory.GetFiles,它们将进行模式匹配。

public static string[] GetFiles(
    string path,
    string searchPattern,
    SearchOption searchOption
)

答案 3 :(得分:0)

您可以使用Directory.GetFiles 递归在目录中搜索匹配文件:

下面的工作示例将找到目录"Hello"中与"C:\"匹配的文件的所有完整路径。

    static void Main(string[] args)
    {
        var files = GetFilePaths("*Hello*", "C:\\");

        foreach (var file in files)
        {
            Console.WriteLine(file);
        }
    }

    public static IEnumerable<string> GetFilePaths(string pattern, string directory)
    {
        return Directory.GetFiles(directory, pattern, SearchOption.AllDirectories);
    }

修改

以下答案更好,因为它可以解决访问被拒绝的问题:

Ignore folders/files when Directory.GetFiles() is denied access