Goの標準ライブラリには、ファイルが存在するかどうかをチェックすることだけを目的とした関数がありません(Pythonのos.path.exists`のように)。これを行うには、どのような方法がありますか?
ファイルが存在しないかどうかをチェックするために、Python'の if not os.path.exists(filename)
と同じです。
if _, err := os.Stat("/path/to/whatever"); os.IsNotExist(err) {
// path/to/whatever does not exist
}
Python'の if os.path.exists(filename)
と同じように、ファイルが存在するかどうかを確認する。
編集内容:最近のコメントごと
if _, err := os.Stat("/path/to/whatever"); err == nil {
// path/to/whatever exists
} else if os.IsNotExist(err) {
// path/to/whatever does *not* exist
} else {
// Schrodinger: file may or may not exist. See err for details.
// Therefore, do *NOT* use !os.IsNotExist(err) to test for file existence
}
以下の例のように、os.Stat()
とos.IsNotExist()
関数を使用する必要があります。
// Exists reports whether the named file or directory exists.
func Exists(name string) bool {
if _, err := os.Stat(name); err != nil {
if os.IsNotExist(err) {
return false
}
}
return true
}
この例はこちらから抜粋したものです。
user11617の例]1は正しくありません。ファイルが存在しない場合でも、他の種類のエラーがあった場合には、ファイルが存在すると報告します。
シグネチャは Exists(string) (bool, error) であるべきです.それから、たまたまですが、コールサイトも良くありません。
彼が書いたコードは、次のようにすると良くなります。
func Exists(name string) bool {
_, err := os.Stat(name)
return !os.IsNotExist(err)
}
しかし、私は代わりにこれを提案します。
func Exists(name string) (bool, error) {
_, err := os.Stat(name)
if os.IsNotExist(err) {
return false, nil
}
return err != nil, err
}