How to open Explorer with a specific file selected?

前端 未结 4 1109
误落风尘
误落风尘 2020-12-08 00:01

I would like to code a function to which you can pass a file path, for example:

C:\\FOLDER\\SUBFOLDER\\FILE.TXT

and it would open Windows E

4条回答
  •  情深已故
    2020-12-08 00:50

    Easiest way without using Win32 shell functions is to simply launch explorer.exe with the /select parameter. For example, launching the process

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

    will open a new explorer window to C:\Folder\subfolder with file.txt selected.

    If you wish to do it programmatically without launching a new process, you'll need to use the shell function SHOpenFolderAndSelectItems, which is what the /select command to explorer.exe will use internally. Note that this requires the use of PIDLs, and can be a real PITA if you are not familiar with how the shell APIs work.

    Here's a complete, programmatic implementation of the /select approach, with path cleanup thanks to suggestions from @Bhushan and @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;
    }
    

    Reference: Explorer.exe Command-line switches

提交回复
热议问题