UWPでのファイルI/O
UWPアプリケーション自体かなりセキュリティを意識した機構を持っていてローカルのストレージへのアクセスがかなり制限されています。
また、HoloLens自体はベースはWindows 10ではありますが、通常のPCと比べてもデバイスとして制約や制限が入っています。
HoloLens上でUWPアプリからファイルを出力するとどのあたりまで可能なのか調べる機会があったので結果を整理してみました。
開発環境
- Windows 10 Pro
- Unity 5.5.0f3
参考になる資料
MSDNにはUWPでファイルI/Oを扱うための資料が以下の場所に公開されています。
HoloLens上でも基本このルールに従っていると思われるのでまずは使えそうな場所すべてにファイルのI/Oを実施しその結果とパスを整理しました。
確認結果
HoloLens上でファイルの読書きをした結果とその際アクセスしたパスの情報は以下の通りです。
No. | カテゴリ | 説明 | 実パス | R/W |
---|---|---|---|---|
1 | streamingAssetsPath(Unity) | UnityのAsset内で作成したstreamingAssetフォルダ | C:\Program Files\WindowsApps\[パッケージ名]VS.[構成名]_[アーキテクチャ].[ユーザ名]\Data\StreamingAssets\ | R |
2 | persistentDataPath(Unity) | アプリケーション内で利用するファイルの格納するフォルダ。 | C:/Users/[ユーザ名]/AppData/Local/Packages/[パッケージファミリ名]/LocalState | R/W |
3 | temporaryCachePath(Unity) | アプリケーションで一時的に使用するファイルを格納するフォルダ。 | C:/Users/[ユーザ名]/AppData/Local/Packages/[パッケージファミリ名]/TempState | R/W |
4 | DocumentsLibrary | サインインしたユーザのドキュメントフォルダ。このフォルダはファイルの読込みのみ対応。 | D:\[ユーザ名]\Documents | R |
5 | PicturesLibrary | サインインしたユーザのピクチャフォルダ。書込む際は「Package.appxmanifest」にて「ピクチャライブラリ」をチェック | D:\[ユーザ名]\Pictures | R/W |
6 | MusicLibrary | サインインしたユーザの音楽フォルダ。未設定では読込のみ。書込む際は「Package.appxmanifest」にて「音楽ライブラリ」をチェック | D:\[ユーザ名]\Music | R/W |
7 | VideosLibrary | サインインしたユーザのビデオフォルダ。未設定では読込のみ。書込む際は「Package.appxmanifest」にて「ビデオライブラリ」をチェック | D:\[ユーザ名]\Videos | R/W |
8 | LocalCacheFolder | アプリケーションで利用できるローカル一時キャッシュフォルダ。アプリケーションがアイドル状態になった場合には破棄される領域(と言われているが実際はどうでもない) | C:\Users\[ユーザ名]\AppData\Local\Packages\[パッケージファミリ名]\LocalCache | R/W |
9 | RoamingFolder | ローミングフォルダ | C:\Users\[ユーザ名]\AppData\Local\Packages\[パッケージファミリ名]\RoamingState | R/W |
10 | TemporaryFolder | アプリケーションで一時的に使用するファイルを格納するフォルダ。 | C:\Users\[ユーザ名]\AppData\Local\Packages\[パッケージファミリ名]\TempState | R/W |
11 | LocalFolder | アプリケーション内で利用するファイルの格納するフォルダ。 | C:\Users\[ユーザ名]\AppData\Local\Packages\[パッケージファミリ名]\LocalState | R/W |
[ユーザ名]:サインインユーザ
[パッケージ名]:「Package.appxmanifest」を開き「パッケージ化」タブ内の「パッケージ名」値
[構成名]:ビルド時の構成(Debug/Release/Master)
[アーキテクチャ]:x86/ARM/x64 ※HoloLensなのでx86
[パッケージファミリ名]:「Package.appxmanifest」を開き「パッケージ化」タブ内の「パッケージファミリ名」値
基本的な考え方
基本的にはUnityで提供されているパス系の情報だけで十分対応できると思います。「音楽ライブラリ」等OSの特定のフォルダへのアクセスについてもUWPで提供されている方法を使うと便利ですが、同じパスを指定できればUnityのみで処理はできます。
Roming Folderについて
このフォルダは少し特殊なフォルダになります。UWPアプリケーションはWindows 10が稼働するデバイスであれば、基本的には動作します。この際にアプリケーションの設定(背景色や保存途中の情報)をデバイス間で同期し共有するためのフォルダになります。