Goコード内のファイルの存在を確認したいのです./conf/app.ini
が、それを行うための良い方法が見つかりません。
JavaにFile:のメソッドがあることは知ってpublic boolean exists()
います。これは、ファイルまたはディレクトリが存在する場合にtrueを返します。
しかし、これはGoでどのように行うことができますか?
// exists returns whether the given file or directory exists
func exists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil { return true, nil }
if os.IsNotExist(err) { return false, nil }
return false, err
}
エラー処理を追加するために編集されました。
あなたはこれを使うことができます:
if _, err := os.Stat("./conf/app.ini"); err != nil {
if os.IsNotExist(err) {
// file does not exist
} else {
// other error
}
}
参照: http: //golang.org/pkg/os/#IsNotExist
参考までに、私の質問はすぐに検索できると思って数分間見回したので。
パスがGoの既存のディレクトリを表しているかどうかを確認するにはどうすればよいですか?
これは私の検索結果で最も人気のある答えでしたが、ここや他の場所では、ソリューションは存在チェックのみを提供します。が既存のディレクトリを表しているかどうかを確認するためpath
に、簡単に次のことができることがわかりました。
path := GetSomePath();
if stat, err := os.Stat(path); err == nil && stat.IsDir() {
// path is a directory
}
私の問題の一部は、path/filepath
パッケージにisDir()関数が含まれていることを期待していたことでした。
ファイルが存在するかどうかを確認する簡単な方法:
if _, err := os.Stat("/path/to/whatever"); os.IsNotExist(err) {
// path/to/whatever does not exist
}
if _, err := os.Stat("/path/to/whatever"); err == nil {
// path/to/whatever exists
}
出典:
次の関数を使用して、ディレクトリにエラーがないかどうかを確認します。if
これは以前の回答と非常に似ていますが、 sをネストしないと、コードがより明確になると思います。これは、ディレクトリパスgo-homedir
から削除し、より適切なエラーメッセージを返すために使用されますが、それらの機能が必要ない場合は、簡単に削除できます。~
pkg/errors
// validateDirectory expands a directory and checks that it exists
// it returns the full path to the directory on success
// validateDirectory("~/foo") -> ("/home/bbkane/foo", nil)
func validateDirectory(dir string) (string, error) {
dirPath, err := homedir.Expand(dir)
if err != nil {
return "", errors.WithStack(err)
}
info, err := os.Stat(dirPath)
if os.IsNotExist(err) {
return "", errors.Wrapf(err, "Directory does not exist: %v\n", dirPath)
}
if err != nil {
return "", errors.Wrapf(err, "Directory error: %v\n", dirPath)
}
if !info.IsDir() {
return "", errors.Errorf("Directory is a file, not a directory: %#v\n", dirPath)
}
return dirPath, nil
}
また、@ Dave Cのコメントを繰り返すために、ディレクトリの存在を確認する理由がファイルをそのディレクトリに書き込むためである場合は、通常、後でエラーを処理してディレクトリを開こうとする方がよいでしょう。
// O_EXCL - used with O_CREATE, file must not exist
file, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666)
if err != nil {
return errors.WithStack(err)
}
defer file.Close()
ファイルが存在するかどうかを確認する簡単な方法があります。
if _, err := os.Stat("./conf/app.ini"); err != nil {
if os.IsNotExist(err) {
..... //Shows error if file not exists
} else {
..... // Shows success message like file is there
}
}