92
70

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Goでファイルの存在チェック

Last updated at Posted at 2013-09-01

2014-09-01 追記

http://qiita.com/suin/items/b9c0f92851454dc6d461#comment-70c188ae8ad783fe57f9 に正しい方法が書かれていました。ありがとうございます!

func Exists(filename string) bool {
    _, err := os.Stat(filename)
    return err == nil
}

ここから元記事

http://stackoverflow.com/questions/12518876/how-to-check-if-a-file-exists-in-go#answer-12527546
で紹介されていますが、os.Stat()してerrを!os.IsNotExist(err)で判定するのが良いようです。

package osutil

import (
	"os"
)

func Exists(name string) bool {
	_, err := os.Stat(name)
	return !os.IsNotExist(err)
}

なぜ、IsExist(err)のほうを使わないかというと
http://golang.org/src/pkg/os/error_posix.go
を見ればわかります。IsExist()はerrがnilのときはfalseを返すからです。err == nil | os.IsExist(err)と書けばよいという話もありますが、errがnilのときfalseを返すということはIsExist()はファイル上書きの時に存在していたらエラーという時のためにあるのだと思います。syscall.EEXISTと比較している箇所もありますし。

IsNotExistのほうなら、os.IsNotExist(err)自体がerrがnilの場合はfalseなのでerr == nil | !os.IsNotExist(err)書かなくても!os.IsNotExist(err)だけでよいわけです。

92
70
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
92
70

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?