概要
よく忘れるので、ここにメモメモ。
os.Stat()
から取得した os.FileInfo
から Mode().Perm()
で取得
後は、それに調べたいパーミッションをANDして判定。例えば、読み取り権限があるかどうかは以下のようにします。
if fperm&0400 == 0400 { output.Stdoutl("[readable]", "yes") }
サンプル
package fileio import ( "os" "path/filepath" "github.com/devlights/gomy/output" ) // StatPermission は、ファイルのパーミッションに関するサンプルです。 func StatPermission() error { const fpath = "internal/examples/basic/fileio/fileio_permission.go" absPath, err := filepath.Abs(fpath) if err != nil { return err } output.Stdoutl("[abspath]", absPath) output.StdoutHr() fstat, err := os.Stat(absPath) if err != nil { return err } var fmode os.FileMode = fstat.Mode() var fperm os.FileMode = fmode.Perm() if fperm&0400 == 0400 { output.Stdoutl("[readable]", "yes") } if fperm&0200 == 0200 { output.Stdoutl("[writable]", "yes") } if fperm&0100 == 0100 { output.Stdoutl("[executable]", "yes") } output.StdoutHr() output.Stdoutf("[Permission]", "%[1]v\t%#[1]o\n", fperm) return nil }
実行すると以下のようになります。
gitpod /workspace/try-golang $ make run go run -race github.com/devlights/try-golang/cmd/trygolang -onetime -example "" ENTER EXAMPLE NAME: fileio_stat_permission [Name] "fileio_stat_permission" [abspath] /workspace/try-golang/internal/examples/basic/fileio/fileio_permission.go -------------------------------------------------- [readable] yes [writable] yes -------------------------------------------------- [Permission] -rw-r--r-- 0644 [Elapsed] 213.969µs
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場