按文件名查找文件

本文关键字:文件 查找 文件名 | 更新日期: 2023-09-27 17:57:49

根据文件名查找文件并返回其路径的最佳方法是什么?

例如

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";
}

有没有一种最佳做法可以通过硬盘上的文件名来查找文件?

按文件名查找文件

试试这个:

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

请尝试一下。

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;

如果我在找一个文件,但不知道位置,那么我会使用bultin Windows搜索。

有关DSearch代码示例的示例,请参阅代码示例页面。

DSearch代码示例演示了如何为静态控制台应用程序,以使用微软搜索ISearchQueryHelper的互操作程序集。

否则,Directory类具有诸如Directory.GetFiles之类的内置帮助程序,它们将进行模式匹配。

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

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

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

    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);
    }

编辑

以下答案更好,因为它是围绕访问被拒绝的问题:

"目录"时忽略文件夹/文件。GetFiles()被拒绝访问