Go言語_ファイル操作

ディレクトリ操作

osパッケージの利用

osパッケージには、UNIXコマンドのようなメソッドが定義されています。


package main

import (
	"fmt"
	"os"
)

const DIRNAME1 string = "go1"
const DIRNAME2 string = "go2"
const DIRNAME3 string = "go2/go3"
const DIRNAME4 string = "go4"

func main() {
	// ディレクトリを作成する
	if err := os.Mkdir(DIRNAME1, 0777); err != nil {
		fmt.Println(err)
	}

	// サブディレクトリ込みでを作成する
	if err := os.MkdirAll(DIRNAME3, 0777); err != nil {
		fmt.Println(err)
	}

	// ディレクトリ名を変更する。既存ディレクトリを上書きします。
	// ディレクトリの移動にも利用できます。
	if err := os.Rename(DIRNAME1, DIRNAME4); err != nil {
		fmt.Println(err)
	}

	// ディレクトリを削除する
	if err := os.Remove(DIRNAME4); err != nil {
		fmt.Println(err)
	}

	// サブディレクトリ込みでを削除する
	if err := os.RemoveAll(DIRNAME2); err != nil {
		fmt.Println(err)
	}
}

ファイル操作

ファイルの作成

osパッケージにはファイル作成関数として、「Create(), NewFile(), Open(), OpenFile()」が用意されています。

Open()とCreate()はOpenFile()のラッパー関数です。(go/src/os/file.goを参照)

NewFile()は引数にuintptrを指定してファイル作成を行う関数です。


package main

import (
	"fmt"
	"os"
)

const FILENAME string = "golang_tmp.txt"

func main() {
	fd, err := os.Create(FILENAME)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(fd)
	fd.Close()
}

ファイルの存在確認

Stat()でファイルの存在を確認できます。

Stat()はファイルだけでなく、ディレクトリに対しても存在確認を行えます。

FileInfo型の戻り値を返しますので、ファイル情報を取得する場合にも利用できます。


package main

import (
	"fmt"
	"os"
)

const FILENAME string = "ex1"

func main() {
	fileInfo, err := os.Stat(FILENAME)
	if err != nil {
		// ファイルが存在しない
		fmt.Println(err)
	} else {
		fmt.Println(fileInfo)
		fmt.Println(fileInfo.Name())
		fmt.Println(fileInfo.Size())
		fmt.Println(fileInfo.Mode())
		fmt.Println(fileInfo.ModTime())
		fmt.Println(fileInfo.IsDir())
		fmt.Println(fileInfo.Sys())
	}
}

ファイルの削除

Remove()でファイルを削除できます。


package main

import (
	"fmt"
	"os"
)

func fileDelete(filename string) error {
	// ファイルの権限変更
	if err := os.Chmod(filename, 0777); err != nil {
		return err
	}

	// ファイルの名前変更(ファイルの移動にも利用できます)
	delfile := filename + "_bak"
	if err := os.Rename(filename, delfile); err != nil {
		return err
	}

	// ファイルの削除
	if err := os.Remove(delfile); err != nil {
		return err
	}
	return nil
}

func main() {
	if err := fileDelete("tmpfile"); err != nil {
		fmt.Println(err)
	}
}


関連ページ