📄
Goでファイルが存在していたらオープン、存在していなかったらファイルを新規作成したい(ReadWrite権限付きで)
ファイルの存在チェックをして、存在していなかったらCreate、存在していたらReadWrite権限でOpenFileするというコードを最初は書いてたんですよ。こんな感じ↓
package main
import (
"fmt"
"os"
)
func main() {
filePath := "example.txt"
var file *os.File
if _, err := os.Stat(filePath); err != nil {
f, err := os.Create(filePath)
if err != nil {
return fmt.Printf("Failed to create file: %v", err)
}
file = f
} else {
f, err := os.OpenFile(filePath, os.O_RDWR, 0644)
if err != nil {
return fmt.Printf("Failed to open file: %v", err)
}
file = f
}
defer file.Close()
// 何らかの処理
}
もっとスマートに書ける方法があったので紹介します。
- var file *os.File
- if _, err := os.Stat(filePath); err != nil {
- f, err := os.Create(filePath)
- if err != nil {
- return fmt.Printf("Failed to create file: %v", err)
- }
- file = f
- } else {
- f, err := os.OpenFile(filePath, os.O_RDWR, 0644)
- if err != nil {
- return fmt.Printf("Failed to open file: %v", err)
- }
- file = f
- }
+ // ファイルをオープン(存在しない場合は作成)
+ file, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE, 0644)
+ if err != nil {
+ fmt.Printf("Failed to open file: %v\n", err)
+ return
+ }
defer file.Close()
OpenFileのフラグに os.O_CREATE
もあったんですね〜。
Discussion