[Go言語]Golangの上書き処理が少し慣れない[memo]

 たとえば、
aaaaaaaaa
という内容のテキストファイルがあった時、これを上書き指定してファイルオープンしてbbbという文字列を書き出すと、
bbbaaaaaa
となる。

 確実に書き換えるならtmpファイルを作成してリネーム操作する。おそらく作成日時も更新される。gitなどでそのテキストファイルをバージョン管理しているならそのあたりの支障はないかもしれないが、少しなじめない…。

 対策や、この仕様についての情報などありましたら、コメントでお教え下さると幸いです。

広告

2018/4/23追記: O_TRUNCについて

 どうやらファイルオープンする際にOpenFileにO_TRUNCを追加していなかったのが原因の模様。
 O_TRUNCを追加しておくと、書き込み先ファイルが存在したときにその内容を消し、そのあと出力する形になる。つまり、中身を消した上で上書きするのである。
 Open関数だけだとこのフラグが渡されていない。Create関数はこのフラグが渡されている。このため、より希望の動作をさせたい場合はos.OpenFile関数を使ったほうが良い。

広告

関連コンテンツと広告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA