如何在c#中获取计算机中的特定文件地址?

如何在c#中获取计算机中的特定文件地址?,c#,C#,我想找到一个视频(.mp4)文件,它存在于某个我不知道的特定文件夹中。该文件具有隐藏的属性、系统和目录。 我已经编写了代码来查找具有该扩展名的文件,但是代码仍然找不到特定的文件 static void Main(string[] args) { List<string> path = new List<string>(); string fileName = "javascript_part1.mp4"; foreach(DriveInfo d i

我想找到一个视频(.mp4)文件,它存在于某个我不知道的特定文件夹中。该文件具有隐藏的属性、系统和目录。
我已经编写了代码来查找具有该扩展名的文件,但是代码仍然找不到特定的文件

static void Main(string[] args)
{
    List<string> path = new List<string>();
    string fileName = "javascript_part1.mp4";
    foreach(DriveInfo d in DriveInfo.GetDrives().Where(x=>x.IsReady))
    {
        foreach(string d1 in Directory.GetDirectories(d.Name))
        {
            try
            {
                foreach(string d2 in Directory.GetDirectories(d1))
                {
                    try
                    {
                        path.AddRange(Directory.GetFiles(d2, fileName, SearchOption.AllDirectories));
                    }
                    catch(Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }

            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
    foreach(string s in path)
    {
        Console.WriteLine(s);
    }
    Console.ReadLine();
}
static void Main(字符串[]args)
{
列表路径=新列表();
字符串fileName=“javascript\u part1.mp4”;
foreach(DriveInfo.GetDrives()中的DriveInfo d,其中(x=>x.IsReady))
{
foreach(Directory.GetDirectories(d.Name)中的字符串d1)
{
尝试
{
foreach(Directory.GetDirectories(d1)中的字符串d2)
{
尝试
{
AddRange(Directory.GetFiles(d2,fileName,SearchOption.AllDirectories));
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
}
foreach(路径中的字符串s)
{
控制台。写入线(s);
}
Console.ReadLine();
}

如果有人能提出代码中存在的问题或修改代码以获得所需结果的任何建议,请告知。

正如Peter B已经提到的,您没有深入研究。所以你需要一种递归,像这样:

public static string FindFile(DirectoryInfo folder, string fileName)
{
    if (folder.EnumerateFiles().Where(x => x.Name == fileName).Any())
    {
        return folder.FullName;
    }

    foreach (var newFolder in folder.EnumerateDirectories())
    {
        return FindFile(newFolder, fileName);
    }

    return "Nothing found";
}

正如Peter B已经提到的,你看起来不深。所以你需要一种递归,像这样:

public static string FindFile(DirectoryInfo folder, string fileName)
{
    if (folder.EnumerateFiles().Where(x => x.Name == fileName).Any())
    {
        return folder.FullName;
    }

    foreach (var newFolder in folder.EnumerateDirectories())
    {
        return FindFile(newFolder, fileName);
    }

    return "Nothing found";
}

您的代码被构建为正好深入两个目录级别,并且在第二个目录级别中查找有问题的文件。如果文件不是2,而是在其他级别上,这将不起作用。我已编写代码从驱动器级别进行检查,但当出现异常时,对路径的访问被拒绝,它不会搜索其他文件夹,它会处理异常并更改驱动器。因此,如果出现异常,建议代码如何在除更改驱动器之外的其他文件夹中搜索。您的代码被构建为正好深入两个目录级别,并在第二个目录级别中查找有问题的文件。如果文件不是2,而是在其他级别上,这将不起作用。我已编写代码从驱动器级别进行检查,但当出现异常时,对路径的访问被拒绝,它不会搜索其他文件夹,它会处理异常并更改驱动器。因此,如果出现异常,建议编写代码如何在除更改驱动器之外的其他文件夹中搜索。
文件夹.EnumerateDirectories()
文件夹.EnumerateFiles()
可能会更快。此外,
.ToArray().Length>0
满足已达到的条件。请尝试以下操作:
if(folder.EnumerateFiles().Any(x=>x.Name==fileName)){…}
folder.EnumerateDirectory()
folder.EnumerateFiles()
可能会更快。此外,
.ToArray().Length>0
正在满足已达到的条件。请尝试以下操作:
if(folder.EnumerateFiles().Any(x=>x.Name==fileName)){…}