みどりゲーム

主にUnityについての覚え書きです。 @G_game8783

【Unity】【Hololens】ファイルをローカルストレージに読み込んだり書き込んだりしたかった

www.naturalsoftware.jp

こちらの記事を参考にやりたかったんですが、うまくいかなかったので別の方法でやった話です。




まず
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();
    }

な、なんとかできた...
(更新してませんね通知が来たため殴り書き)