我想编写一个可以传递文件路径的函数,例如:
C:\FOLDER\SUBFOLDER\FILE.TXT
Run Code Online (Sandbox Code Playgroud)
它将打开包含该文件的文件夹的Windows资源管理器,然后在该文件夹中选择此文件.(类似于许多程序中使用的"在文件夹中显示"概念.)
我怎样才能做到这一点?
在Windows Media Player库中,您可以选择一个或多个音乐文件.然后,您可以右键单击并在其上下文菜单中选择" 打开文件位置".这将为文件所在的每个目录打开一个Windows资源管理器窗口,并为您选择文件.
所以我们假设我们的库里有一堆mp3文件,其中有三个是这样的:
如果我们选择这三个(在所有这些都可见的视图中)并打开文件位置,则会弹出两个浏览器窗口.一会是Z:\音乐\周四蓝调文件夹01.我想这是friday.mp3选择,而另一个将是*Z:\音乐\数羊**与两个文件夹01.羊#1. mp3和02.选择绵羊#2.mp3.
我怎么能在C#中自己做这个?我们有一个应用程序将数据导出为各种格式,例如CSV和Excel,我想打开资源管理器窗口,在创建这些文件并准备好查看时选择这些文件.目前我只是这样做Process.Start(path),但这很有效,但我也希望能够突出显示这些特定文件.会使刚刚创建的文件更加明显.
Windows Media Player做得很好......我也想这样做= /这里是否有任何微软员工可以弄清楚如何做到这一点?(一个)
这可以是在与文件/文件夹一起使用的程序中具有的便利功能.使用以下方法实际打开包含文件夹很容易:
System.Diagnostics.Process.Start( *path to folder* );
Run Code Online (Sandbox Code Playgroud)
...但是如何在该父文件夹中实际选择目标文件?如果我使用Process.Start方法,它实际上会尝试打开该文件.
在Windows资源管理器中搜索文件并右键单击搜索结果中的文件时; 有一个选项:"打开文件位置".我想在我的C#WinForm中实现相同的功能.我这样做了:
if (File.Exists(filePath)
{
openFileDialog1.InitialDirectory = new FileInfo(filePath).DirectoryName;
openFileDialog1.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
使用SO帖子"打开文件夹并选择文件"的答案中描述的代码,我创建了这个函数:
public static void OpenExplorerAndSelectFile(string filePath)
{
Process.Start(
@"explorer.exe",
string.Format(@"/select, ""{0}""", filePath));
}
Run Code Online (Sandbox Code Playgroud)
这个功能运行良好,有一个小问题:
首次为特定文件调用该函数时,Windows资源管理器会正确显示该文件的文件夹,但不会选择该文件.
再次为同一个文件调用相同的函数,它会切换回Windows资源管理器中已打开的文件夹,然后选择该文件.
例如,第一次调用OpenExplorerAndSelectFile("C:\MyFolder\MyFile.txt")在新的Windows资源管理器窗口中打开文件夹"C:\ MyFolder".第二次调用OpenExplorerAndSelectFile("C:\MyFolder\MyFile.txt")实际上再次激活该窗口并选择MyFile.txt.
在谷歌浏览器中做类似的事情(转到下载页面并显示以前下载的文件)实际上在第一次尝试时效果很好.
所以我的结论是谷歌Chrome似乎与我有点不同.
我的问题:
有没有办法调试/跟踪谷歌Chrome调用的Win32/Shell方法?
然后我会将它们与我所做的比较以查看差异.