2012-08-26 6 views
6

Ich mag würde path.Dir() auf Unix und Windows mit einem plattformspezifischen Verzeichnis verwenden. Bitte werfen Sie einen Blick auf den Code:golang: Cross-Plattform-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`)) 
} 

Diese gibt

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

Ich möchte für den zweiten Anruf zu path.Dir() (Fenster) um etwas zu bekommen, wie

c:\foo 

Ist es möglich, path.dir() mitzuteilen, Windows-Trennzeichen für mein Programm zu verwenden, das auf Fenstern läuft? Oder sollte ich konvertieren immer die Schrägstriche \ Slashes (/)? Was ist die bevorzugte Strategie hier?

Antwort

10

Ich sehe, wo das "Problem" ist. This discussion at golang-nuts gab mir den Hinweis, dass path.Dir() verwendet immer / und filepath.Dir() ist die Funktion für plattformabhängige Manipulation verwendet werden.

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`)) 
} 

auf Fenster:

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

Es ist erwähnenswert, dass die Paketübersicht für ‚Pfad‘ stellt fest, dass es für Schrägstriche getrennte Pfade und ‚path/filepath‘ ist os spezifisch. Wenn Sie es benötigen, können Sie mit filepath.ToSlash() und filepath.FromSlash() auch slash-separated und os-specific konvertieren. –

+0

@RunningWild Guter Rat, danke. Ich, als ein Nicht-Muttersprachler, nahm an, dass "durch Schrägstriche getrennte Pfade" beides bedeuten kann (umgekehrte und vorwärts gerichtete Schrägstriche). Jetzt weiß ich es besser. – topskip