c# - 如何使用选定的特定文件打开资源管理器?

标签 c# winapi vbscript

我想编写一个函数,您可以将文件路径传递给该函数,例如:

C:\FOLDER\SUBFOLDER\FILE.TXT

它会打开包含该文件的文件夹的 Windows 资源管理器,然后在该文件夹中选择该文件。 (类似于许多程序中使用的“在文件夹中显示”概念。)

我该怎么做?

最佳答案

不使用 Win32 shell 函数的最简单方法是使用 /select 参数简单地启动 explorer.exe。比如启动进程

explorer.exe/select,"C:\Folder\subfolder\file.txt"

将打开一个新的资源管理器窗口到 C:\Folder\subfolder 并选择 file.txt。

如果您希望在不启动新进程的情况下以编程方式执行此操作,则需要使用 shell 函数 SHOpenFolderAndSelectItems ,这是 explorer.exe 的 /select 命令将在内部使用的内容。请注意,这需要使用 PIDL,如果您不熟悉 shell API 的工作原理,这可能是一个真正的 PITA。

这是 /select 方法的一个完整的、程序化的实现,由于@Bhushan 和@tehDorf 的建议,路径清理:

public bool ExploreFile(string filePath) {
    if (!System.IO.File.Exists(filePath)) {
        return false;
    }
    //Clean up file path so it can be navigated OK
    filePath = System.IO.Path.GetFullPath(filePath);
    System.Diagnostics.Process.Start("explorer.exe", string.Format("/select,\"{0}\"", filePath));
    return true;
}

引用:Explorer.exe Command-line switches

关于c# - 如何使用选定的特定文件打开资源管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13680415/

相关文章:

c++ - 我可以删除在另一个进程中创建的 HBITMAP 对象吗?

java - 更改路径后,VB 脚本未执行 我看到 Windows 脚本主机提示符具有不同的路径

c# - 是否可以不指定工作表名称和列?

检查文件是否存在于c中

c# - 使用 C# 访问 Excel 电子表格有时会为某些单元格返回空白值

c++ - ReadProcessMemory 更快

vba - 将数据从一个电子表格复制到另一个

asp-classic - ASP VBScript Redim 保留类型不匹配 - 变量定义的范围

c# - 通过 ajax 使用 List<MyItem> 参数调用 Controller 方法

c# - 没有为命令对象设置命令文本