[Windowsストアアプリ開発]テキストファイルの入出力
準備する
早速、簡単なサンプルを作ってましょう。新しいプロジェクトを作成してMain.xamlに以下の画像のようにコンポーネントを配置します。 分かりづらいですがボタンの下には、TextBlockが置いてあります。私は MyText という名前にしました。
テキストファイルの読み込み
画面ができたのでプログラムを実装していきます。 まずは以下の名前空間をusingディレクティブに追加してください。
using Windows.Storage.Pickers; using Windows.Storage;
次に「テキストファイルの読み込み」ボタン押下時の処理を実装します。 Windowsストアアプリでファイルを開くは FileOpenPicker というクラスを使います。FileOpenPickerに表示モード、選択できるファイル形式、最初に表示する場所を設定して PickSingleFileAsync を呼び出すと画面が切り替わります。
private async void ReadText(object sender, RoutedEventArgs e) { FileOpenPicker openPicker = new FileOpenPicker(); // 表示モードの選択(他にはPickerViewMode.Thumbnailを指定することができます) openPicker.ViewMode = PickerViewMode.List; // ファイル形式 openPicker.FileTypeFilter.Add(".txt"); // 最初に表示される場所 openPicker.SuggestedStartLocation = PickerLocationId.ComputerFolder; StorageFile file = await openPicker.PickSingleFileAsync(); if (file != null) { using (Stream stream = await file.OpenStreamForReadAsync()) using (StreamReader reader = new StreamReader(stream)) { MyText.Text = await reader.ReadToEndAsync(); } } }
実装ができたら実行しましょう。「テキストファイルの読み込み」ボタンを押すと、ファイル選択の画面に切り替わります。 ハードディスク内のテキストファイルを選択するとTextBlockにテキストファイルの中身が出力されます。
表示モード
表示モードはリストとサムネイルがあります。
ファイル形式
ファイル形式は拡張子を指定しますが、このサンプルの場合、拡張子がtextのファイルは表示されないので、複数、拡張子があるファイルの場合は注意しましょう。拡張子を小文字で指定した場合でも大文字の拡張子のファイルも表示してくれるので複数指定する必要はありません。
(例)今回のサンプル(.txt)の場合 sample.txt → 表示される sample.TXT → 表示される sample.text → 表示されない sample.TEXT → 表示されない
最初に表示される場所
最初に表示する場所をFileOpenPickerクラスのSuggestedStartLocationプロパティに指定します。 このサンプルではコンピューターフォルダを指定していますが、この他にはデスクトップやドキュメントライブラリ、ピクチャライブラリが指定できます。
テキストファイルの書き込み
次に「テキストファイルの書き込み」ボタン押下時の処理を実装します。 今度は FileSavePicker というクラスを使います。 デフォルトのファイル名、ファイル形式、最初に表示される場所を設定して PickSaveFileAsync を呼び出すと画面が切り替わります。 ファイルを出力 WriteAsyncメソッドでファイルに文字列を出力しています。引数には出力する文字列を指定しています。
private async void WriteText(object sender, RoutedEventArgs e) { FileSavePicker savePicker = new FileSavePicker(); // ファイル名 savePicker.SuggestedFileName = "sample2"; // ファイル形式 savePicker.FileTypeChoices.Add("Plain Text", new List<string>() { ".txt" }); // 最初に表示される場所 savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary; StorageFile file = await savePicker.PickSaveFileAsync(); if (file != null) { using (Stream stream = await file.OpenStreamForWriteAsync()) using (StreamWriter writer = new StreamWriter(stream, System.Text.Encoding.UTF8)) { await writer.WriteAsync("Hello World."); } } }
以下が PickSaveFileAsync メソッドを呼び出した際の画面です。指定したファイル名が表示されていますが、ユーザーが変更することが可能です。保存したい場所を選択して画面右下の保存ボタンを押すと、テキストファイルが保存されます。