LoginSignup
2
1

More than 5 years have passed since last update.

Unityのテキストファイル書き出しUtilクラス

Posted at

ログファイルの保存

C#のStreamWriterの挙動について
消費メモリと処理速度の観点から検証しましたが、やはりファイルオープンしっぱなしで毎フレームちょっとずつ音声データをWrite、最後にファイルクローズという手法で問題なさそうです。

こういうのがやりたかったのですが、ネット上のサンプルコードがなぜか即Flush()Close()してばっかりで「そうじゃねんだよなぁ……」って感じなので自分で作りました。

TextFileWriter.cs

使い方

usecase
_fileWriter = new TextFileWriter(Application.temporaryCachePath + "/temp.txt");

for (int count = 0; count < 10000; count++)
{
    _fileWriter.Write(count);
}

_fileWriter.Dispose();

ちゃんと保存されます。

Flush()Close()Dispose()のときにしか呼んでいません。なので使い終わったら必ずDispose()してください。呼ばなくてもわりと保存されてますが。
'StreamWriter.AutoFlush'をtrueに設定すると書き込むたびに中でFlush()してくれるようです。パフォーマンスに影響は出ますが、はっきりわかるレベルまで負荷がかかることはないと思います。嫌だったらAutoFlushのくだりを消しておいてください。デフォルトはfalseです。

TextFileWriter.cs
public TextFileWriter(string path)
{
    _streamWriter = new StreamWriter(path, true, Encoding.UTF8) {AutoFlush = true};
}

まとめ

わざわざラッパー作らなくてもStreamWriter直叩きでいいかな……って気がすごくしますが、まあ作っちゃったのでいちおう。パフォーマンス計測とかあんまりやったことないのでどうしたらいいか知らないのです。基本は気合と根性で書いて、速度はフレームワークとかハードウェアがなんとかしてくれるゆとり世代です。

ところでほんとにこれっぽいサンプルがネットで見つからなかったのですが、あまりにも当然だから書くまでもなかったのか、実はそんなに需要がないのか。謎。

おしまい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1