WindowsStoreアプリでテキストファイルの保存と読み出し(ローミングフォルダ)
MetroUIでファイルを保存、読み込む方法です。
WinRTでは、新たに「ローミングフォルダ」にファイルを保存することができます。ローミングフォルダはユーザーが各デバイスでも共有できる領域となります。
private static async Task<string> ReadFile(string fileName) { // ローミングフォルダ (C:\Users\<ユーザー名>\AppData\Local\Packages\<アプリ別のID>\RoamingState) StorageFolder folder = ApplicationData.Current.RoamingFolder; try { // ファイルを開く StorageFile file = await folder.GetFileAsync(fileName); using (IRandomAccessStream rStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read)) using (StreamReader reader = new StreamReader(rStream.AsStream(), Encoding.UTF8)) { // ファイル内容を読み取り return reader.ReadToEnd(); } } catch (FileNotFoundException) { //ファイルが存在しない場合(なにもしない) } return string.Empty; }
private static async void WriteFile(string fileName , string body) { // ローミングフォルダ StorageFolder folder = ApplicationData.Current.RoamingFolder; // ファイル(存在すれば上書き) StorageFile file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); // 書き込み using (IRandomAccessStream rStream = await file.OpenAsync(FileAccessMode.ReadWrite)) using (IOutputStream oStream = rStream.GetOutputStreamAt(0)) { DataWriter writer = new DataWriter(oStream); writer.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8; writer.WriteString(body); await writer.StoreAsync(); } }
マイドキュメントは「StorageFolder folder = KnownFolders.DocumentsLibrary;」とも書けますが、KnownFolders.DocumentsLibrary は、ちゃんと設定しないとSystem.UnauthorizedAccessExceptionの例外が出るので使いませんでした。
TEMPフォルダとして、「StorageFolder folder = ApplicationData.Current.TemporaryFolder;」と書くことができます。こちらは簡単に利用できます。パスは「C:\Users\<ユーザー名>\AppData\Local\Packages\<アプリ別のID>\TempState」となります。
利用方法
// 書き込み WriteFile("test.txt","テスト本文"); // 読み込み string value = await ReadFile("test.txt");
- 参考
- http://blogs.msdn.com/b/b8_ja/archive/2012/05/25/metro-trustworthy.aspx
- http://www.atmarkit.co.jp/fdotnet/chushin/readyforwin8app_01/readyforwin8app_01_02.html
- http://d.hatena.ne.jp/ch3cooh393/20120821/1345478322
- http://bluewatersoft.cocolog-nifty.com/blog/2012/04/21-metro-13-6f2.html
- http://d.hatena.ne.jp/norimakiXLVI/20120318/1332043558
- http://d.hatena.ne.jp/taedium/20120429
- http://dotnet.dzone.com/articles/windows-8-metro-app-tip-day
- http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/e77fdd08-029d-47bf-8d7e-3e2df935f84f