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)
}
}