2012-08-22 12 views
6

Me gustaría abrir un archivo PDF en el sistema de archivos desde la aplicación predeterminada. ¿Cómo puedo hacer eso? Desde la línea de comandos, simplemente escribo el nombre del archivo pdf y la aplicación se abre (con el archivo solicitado). Cuando trato de usar exec.Command() me sale un error (como era de esperar) exec: "foo.pdf": executable file not found in %PATH%.golang: ejecutar la aplicación predeterminada para un archivo pdf en Windows

package main 

import (
    "log" 
    "os/exec" 
) 

func main() { 
    cmd := exec.Command("foo.pdf") 
    err := cmd.Start() 
    if err != nil { 
     log.Fatal(err) 
    } 
    err = cmd.Wait() 
    if err != nil { 
     log.Fatal(err) 
    } 

} 

Respuesta

1

Debe iniciar cmd /C start foo.pdf. Esto permitirá que el comando de inicio encuentre el ejecutable correcto para usted.

cmd := exec.Command("cmd", "/C start path_to_foo.pdf") 
+0

Este método no funciona si el nombre del archivo tiene espacios en él – Carl

+0

Creo que debería ser posible abrir un nombre de archivo con espacios en él. Ver http://stackoverflow.com/a/13692919/395461 Pero no pude conseguir que el comando funcione correctamente en Go, aunque lo haría cuando se ingresara manualmente en la línea de comando. – Shannon

11
exec.Command("rundll32.exe", "url.dll,FileProtocolHandler", "path_to_foo.pdf") 

También hay que manejarlo.

Tenga en cuenta que todavía la forma correcta de hacerlo es utilizar un envoltorio de C alrededor de la función ShellExecute() API exportado por shell32.dll y el "w32" library parece proporcionar este envoltorio de inmediato.

+3

Este método funciona incluso si el nombre del archivo tiene espacios en él – Carl

Cuestiones relacionadas