Skip to content

osパッケージ

ファイルのステータスの確認

os.Stat関数を呼び出すと色々取れる。

import (
    "errors"
    "fmt"
    "os"
)

func main() {
    info, err := os.Stat("test1.txt")
    if err != nil {
        if errors.Is(err, os.ErrNotExist) {
            fmt.Println("ファイルなし")
        } else if err != nil {
            fmt.Printf("os.Stat()でエラー発生: %v\n", err)
        }
        return
    }

    fmt.Println("ファイルあり")
    fmt.Printf("ファイルサイズ: %v\n", info.Size())
    fmt.Printf("モード: %v\n", info.Mode())
    fmt.Printf("更新日時: %v\n", info.ModTime())

    if info.IsDir() {
        fmt.Println("ディレクトリだ")
    } else if info.Mode().IsRegular() {
        fmt.Println("通常ファイルだ")
    } else {
        fmt.Println("それ以外?")
    }
}

ディレクトリを作成する

os.MkdirAll関数を利用するとディレクトリが作成できる。 パーミッションはx(実行権限)を付けないとlsで表示できなくなるので注意。

import (
    "fmt"
    "os"
)

func main() {
    if err := os.MkdirAll("data", 0775); err != nil {
        fmt.Printf("ディレクトリ作成失敗: %v\n", err)
        return
    }
    fmt.Println("ディレクトリ作成成功")
}

ディレクトリを丸ごと削除する

os.RemoveAllでディレクトリを丸ごと削除できる。
ファイルが存在しない場合、nilが戻ってくるので用途によっては注意。

package main

import (
    "fmt"
    "os"
)

func main() {
    targetDir := "mydir"
    // RemoveAllの戻り値は対象が存在しない場合はnilを返すので
    // 必要なら事前にチェックする
    if _, err := os.Stat(targetDir); os.IsNotExist(err) {
        fmt.Fprintf(os.Stderr, "Error: not found directory %q\n", targetDir)
        return
    }
    err := os.RemoveAll(targetDir)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Error: failed to remove directory: %v\n", err)
    } else {
        fmt.Printf("Successfully remove the directory %q.\n", targetDir)
    }
}

リネームする

import (
    "fmt"
    "os"
)

func main() {
    if err := os.Rename("data", "data-new"); err != nil {
        fmt.Printf("リネーム失敗: %v\n", err)
        return
    }
    fmt.Println("リネーム成功")
}