繁体   English   中英

按文件名查找文件

[英]Find a file by file name

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

例如

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 Search

请参阅代码示例页面以获取特别是DSearch代码示例的示例。

DSearch 代码示例演示如何为静态控制台应用程序创建一个类,以使用 ISearchQueryHelper 的 Microsoft.Search.Interop 程序集查询 Windows Search。

否则, 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);
    }

编辑

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

当 Directory.GetFiles() 被拒绝访问时忽略文件夹/文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM