$ cat renamed.txt
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
$ cat renamed.txt
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
対象の Issue
9.2 節をリプレースする
https://github.com/yuk1ty/learning-systems-programming-in-rust/issues/59Goでは、 truncate()に関数とメソッドがあり、両方の使用例がありますが、 Rustでのtruncateは 関数版はなく、set_len()メソッドのみのようです。
また、Goのtruncateの例は、結果ファイルが次のリネーム処理で上書きされて残らないので、Rust版では
truncated.txt
というファイル名で作成して、truncate後に100bytesになることを確認しました。コメントになっている、ファイルの移動先のデバイスやドライブ違う場合の例について、Goではファイルをopenしてデータをio:copy()していますが、 Rustでは、fs::copy()がファイル名でcopyできて便利なのでこちらを利用しています。
renamed.txt
のデータサイズが Goで 448bytes, Rustで447bytesなのは、Goの方の4行目の改行コードが\r\n
であるためのようです。 Rustの方は全行\n
に統一しています。動作確認結果
golang版 9.2.4
Rust版 9.2.4