2012-08-26 9 views
6

Mi piacerebbe utilizzare path.Dir() su Unix e Windows con una directory specifica della piattaforma. Si prega di dare un'occhiata al codice:golang: cross platform path.Dir

package main 

import (
    "fmt" 
    "path" 
) 

func main() { 
    fmt.Println(`path.Dir("a/b/c"): `, path.Dir("a/b/c")) 
    fmt.Println(`path.Dir("c:\foo\bar.exe"): `, path.Dir(`c:\foo\bar.exe`)) 
} 

Emette

path.Dir("a/b/c"): a/b 
path.Dir("c:\foo\bar.exe"): . 

mi piacerebbe ottenere per la seconda chiamata al path.Dir() (finestre) qualcosa come

c:\foo 

E ' possibile dire a path.dir() di utilizzare i separatori di Windows per il mio programma in esecuzione su Windows? O devo sempre convertire i backslash \ per inoltrare le barre (/)? Qual è la strategia preferita qui?

risposta

10

Vedo dove si trova il "problema". This discussion at golang-nuts mi ha dato il suggerimento, che path.Dir() utilizza sempre / e filepath.Dir() è la funzione da utilizzare per la manipolazione della piattaforma.

package main 

import (
    "fmt" 
    "path/filepath" 
) 

func main() { 
    fmt.Println(`filepath.Dir("a/b/c"): `, filepath.Dir("a/b/c")) 
    fmt.Println(`filepath.Dir("c:\foo\bar.exe"): `, filepath.Dir(`c:\foo\bar.exe`)) 
} 

sulle finestre:

filepath.Dir("a/b/c"): a\b 
filepath.Dir("c:\foo\bar.exe"): c:\foo 
+3

Vale la pena notare che la panoramica pacchetto per 'percorso' afferma che è per i percorsi di barra separati e 'path/percorsofile' è specifico per os. Inoltre, se necessario, filepath.ToSlash() e filepath.FromSlash() possono essere utilizzati per convertire da e separati da barre e specifici per OS. –

+0

@RunningWild Un buon consiglio, grazie. Io, in quanto madrelingua, ho pensato che "i percorsi separati dalla barra" possono significare entrambi (barre rovesciate e avanti). Ora lo so meglio. – topskip