2017-12-03 1 views
3

ファイル内の深いフォルダ内にあり、2レベル上のディレクトリを取得したい場合は、次のapiが表示されますが、 のようなものを追加する方法はわかりません。 /../" 、 何か案が?例えばプロジェクトのルートフォルダを2レベル上に取得する方法

dir, err := os.Getwd() 

私は、次の

/Users/i02222333/go/src/myapp/src/test 

を取得し、私はいくつかの操作にパスした文字列をカットすることができますが、よりよい解決策があるかどうか私の質問がある

/Users/i02222333/go/src/myapp 

が必要ゴランと一緒にやる?

+0

実行ファイルを '/ Users/i02222333/go/src/myapp'から実行します。ソースコード/プロジェクトが本当に問題ではない場所では、どのフォルダから実行ファイルを起動するかが重要です。 – tkausl

+0

@tkausl - 私はテストファイル(最初のパスの終わり)の中でコマンドを実行します。そこで、私はそのパスを 'myapp 'の2レベルで知っているはずです。あなたは例を挙げることができますか? –

答えて

1

あなたはこのようpathパッケージを使用して '../../' のディレクトリ名を取得することができます:ここでは

import (
    "fmt" 
    "os" 
    "path" 
) 

func main() { 
    dirname, err := os.Getwd() 
    if err != nil { 
     panic(err) 
    } 

    fmt.Printf("Current directory: %v\n", dirname) 
    dir, err := os.Open(path.Join(dirname, "../../")) 
    if err != nil { 
     panic(err) 
    } 

    fmt.Printf("Name of ../../: %v\n", dir.Name()) 
} 

メイン

パッケージには、私の出力の例です:

$ go run main.go 
Current directory: /Users/jack/go/src/stackoverflow/example/directory 
Name of ../../: /Users/jack/go/src/stackoverflow 
+0

ファイルパスには 'path'ではなく' filepath'を使うべきです。単純な文字列連結ではなく、結合の動きを見ているなら '/'セパレータをハードコーディングしないでください。 – JimB

関連する問題