c# winapi vbscript

c# - ¿Cómo abrir Explorer con un archivo específico seleccionado?



winapi vbscript (2)

Me gustaría codificar una función a la que puede pasar una ruta de archivo, por ejemplo:

C:/FOLDER/SUBFOLDER/FILE.TXT

y abriría Windows Explorer con la carpeta que contiene el archivo y luego seleccionaría este archivo dentro de la carpeta. (Similar al concepto "Mostrar en la carpeta" utilizado en muchos programas).

¿Cómo puedo hacer esto?


Al ejecutar el comando si su ruta contiene barras múltiples, no abrirá la carpeta y seleccionará el archivo correctamente. Asegúrese de que la ruta de archivo sea la siguiente.

C: / a / b / x.txt

en lugar de

C: // a // b // x.txt


La forma más sencilla sin usar funciones de shell Win32 es simplemente iniciar explorer.exe con el parámetro /select . Por ejemplo, iniciar el proceso

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

abrirá una nueva ventana del explorador en C: / Carpeta / subcarpeta con archivo.txt seleccionado.

Si desea hacerlo mediante programación sin iniciar un nuevo proceso, necesitará usar la función de shell SHOpenFolderAndSelectItems , que es lo que el comando /select para explorer.exe usará internamente. Tenga en cuenta que esto requiere el uso de PIDL, y puede ser un PITA real si no está familiarizado con el funcionamiento de las API de shell.

Aquí hay una implementación completa y programática del enfoque /select , con limpieza de rutas gracias a las sugerencias de @Bhushan y @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; }