いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-129 (ファイルのパーミッションを取得)

概要

よく忘れるので、ここにメモメモ。

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

過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com