【Unity】【Hololens】ファイルをローカルストレージに読み込んだり書き込んだりしたかった
こちらの記事を参考にやりたかったんですが、うまくいかなかったので別の方法でやった話です。
まず
using System.Threading.Tasks;
がC#のバージョン的に使えない!と思ったんですが、Hololens側では使える(らしい)し、Unity2017で対応していたから設定を変えればよかった。
問題は
using Windows.Storage;
こいつは.NET開発環境入れとけば使えるかと思ったが参照できない...(そもそもこの辺の知識が足りなすぎる)
ので、System.IOでやろう!! と思ったんですがここにも罠が
UWP アプリの System.IO 名前空間
なんと一部のメンバーが使えない! Close()とか
(どれが使えないか書いといてくれ...)と思いながら手探りで作成。
とりあえずcsvをC:\Users\[ユーザ名]\AppData\Local\Packages\[パッケージファミリ名]\LocalStateに出力できた例を書きます。
IO可能な範囲については
HoloLensで始めるUWP - HoloLens上でファイルI/O可能な範囲 - Qiita
を参照してください。
ファイルを見るのはデバイスポータルのファイルエクスプローラーで
使えなかったパターン
private static void OutputLog() { string adress = Application.persistentDataPath + "/test.csv"; //化けるからUTF-8で生成 StreamWriter sw = new StreamWriter(adress , false, System.Text.Encoding.GetEncoding(65001)); sw.WriteLine("ここに書き込み内容"); sw.Flush(); sw.Close(); }
どうやらStreamWriter のコンストラクタがあかんらしい Close()はDispose()で
使えたパターン
private void OutputLog() { string adress = Application.persistentDataPath + "/test.csv"; StreamWriter sw; if (!File.Exists(adress)) { Debug.Log("ないから作る"); sw = File.CreateText(adress); sw.Flush(); sw.Dispose(); } //化けるからUTF-8で生成 sw = new StreamWriter(new FileStream(adress, FileMode.Open), Encoding.UTF8); sw.WriteLine("ここに書き込み内容"); sw.Flush(); sw.Dispose(); }
な、なんとかできた...
(更新してませんね通知が来たため殴り書き)