2012-08-22 12 views
6

Vorrei aprire un file PDF nel filesystem da andare con l'applicazione predefinita. Come lo posso fare? Dalla riga di comando, scrivo il nome del file pdf e l'applicazione si apre (con il file richiesto). Quando provo a usare exec.Command() ottengo un errore (non a caso) exec: "foo.pdf": executable file not found in %PATH%.golang: eseguire un'applicazione predefinita per un file pdf su 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) 
    } 

} 

risposta

1

È necessario avviare cmd /C start foo.pdf. Ciò consentirà al comando di avvio di trovare l'eseguibile corretto per te.

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

Questo metodo non funziona se il nome del file contiene spazi in esso – Carl

+0

Penso che l'apertura di un nome file con spazi al suo interno dovrebbe essere possibile. Vedi http://stackoverflow.com/a/13692919/395461 Ma non ho potuto ottenere il comando per funzionare correttamente in Go, anche se sarebbe stato inserito manualmente sulla riga di comando. – Shannon

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

dovrebbe anche gestirlo.

noti che ancora il modo giusto per farlo è utilizzare un involucro C intorno alla funzione ShellExecute() API esportata dal shell32.dll, e il "w32" library sembra fornire questo involucro subito.

+3

Questo metodo funziona anche se il nome del file contiene spazi – Carl

Problemi correlati