質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

11330閲覧

golangでファイルに上書きではなく、追加書き込みをしたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

1クリップ

投稿2017/08/03 09:52

#環境
Go1.8.3
gogland EAP

#やりたいこと
ファイルに[]byteで文字を何度か書き込みたいのですが、調べた方法で行うと、前回書き込んだ文字列が消えて新しい文字列に上書きされてしまいます。そうならないように追記する書き込み方はありますか?

今の私のコードは以下のようになっています。
この状態では上書きされてしまいます。

go

1str := "I am_super man" 2fileWrite(str) 3 4func fileWrite(str string) { 5 keyAndValue := []byte(str + "\n") //文字列を[]byteにキャスト 6 ioutil.WriteFile("words.txt", keyAndValue, 0666) //書き込み 7}

すでに描いてある文字列を全部読み込んでからその末尾に付け足して、上書き書き込みというのならできそうですが....そんな大掛かりなことしないといけないのかな....と思っています。
どうかご教示ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

os.O_APPEND を使って下さい。

go

1f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600) 2if err != nil { 3 log.Fatal(err) 4} 5defer f.Close() 6 7fmt.Fprintln(f, "テラテイル")

投稿2017/08/03 10:28

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattn

2017/08/03 10:29

モードを 0600 としましたが、ここは要件に合わせて設定下さい。
退会済みユーザー

退会済みユーザー

2017/08/03 11:12

ありがとうございます! os.OpenFileではファイルがなかった場合エラー起きるようでしたので、os.Stat()で生存確認して、ファイルがなかったらos.Create()でファイルを作るようにしました! 助かりました。迅速な回答感謝します。
mattn

2017/08/03 13:09

なかったらファイルを作るのであれば os.OpenFile(filename, os.O_RDWR|os.O_APPEND, 0600); で行けます。
退会済みユーザー

退会済みユーザー

2017/08/07 07:11

重ね重ねありがとうございます
退会済みユーザー

退会済みユーザー

2017/08/07 07:59 編集

Open用のフラグを調べたところ、os.RDWRは読み書きようにするだけで、ファイル新規作成はos.O_CREATEのようです。 というわけで、file, err := os.OpenFile(filepath, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666) こうするとうまく動きました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問