如何仅从文件的名称中检索路径

本文关键字:检索 路径 何仅 文件 | 更新日期: 2023-09-27 18:18:44

我正在寻找一种在不知道文件位置的情况下检索文件路径的方法。

我开发了一个c#应用程序,它可以启动VLC流视频,我正在努力改进它。

实际上,我像这样直接传输vcl .exe的路径:

ProcessStartInfo processInfo
    = new ProcessStartInfo(@"C:'Program Files (x86)'VideoLAN'VLC'vlc.exe", adr);

但是如果。exe不在这里,它不工作(正常)。

所以,我想发现vcl .exe的路径,独立于系统。

通过我的研究,我找到了检索当前路径或解析带有目录的路径的函数,但没有关于我的问题。

编辑:

我尝试了这些解决方法,但都不成功。

例如,如果客户端安装了VLC(或其他文件)在D:'Tools' VLC .exe

如何获取vcl .exe的路径?

如何仅从文件的名称中检索路径

困难的方法是遍历每个驱动器上的每个目录并查找该文件。不推荐,除非你想花很多时间搜索。

更简单的方法是查看VLC安装的注册表。卸载信息应该包含路径,就像VLC自己的一些密钥一样。

我的想法是:

string[] paths = Directory.GetFiles("your path where u want to search", "name of file", SearchOption.AllDirectories);

如果你在其他目录中有相同的文件,你可以在这个数组中搜索唯一的文件。

string[] endpaths = paths.Where(x => Path.GetFullPath(x).Contains("Your unique name or folder in path")).Select(x => Path.GetFullPath(x)).ToArray();

之后你可以有唯一的文件

这应该可以工作,但可能不是那么有效

var filePath = Directory
             .EnumerateFiles("C:''", "*", SearchOption.AllDirectories)
             .First(x => Path.GetFileName(x) == "vlc.exe");

您可以使用Environment.SpecialFolder enum在运行软件的机器上检索程序的安装路径,例如根据体系结构以以下方式之一:

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);

然后使用Path.Combine,您可以附加后缀:"'VideoLAN'VLC' VLC .exe"

您仍然需要检查文件是否存在File.Exists,以便在尝试运行它之前保持安全。

在Windows中安装的应用程序通常会在注册表中记录安装路径,您可以尝试查看vlc是否也这样做并从注册表项中检索路径,这是因为有人可能在安装时仍然决定使用不同的路径/文件夹名称,有点不寻常,但您永远不会知道。