[UWP][フォルダー操作] アプリケーションデータの場所を取得する

アプリケーションのデータが保存されているディレクトリを取得したい場合はApplicationData.Current.LocalFolder を使用します。

これによりアプリのローカルディレクトリを表す StorageFolderを取得することができます。

StorageFolder型なので、パス文字列を取得したい場合には以下のようなコードを記述します。

Windows.Storage.StorageFolder localDir= 
    Windows.Storage.ApplicationData.Current.LocalFolder;

string path = localDir.Path;

現在作成中のアプリをデバッグ環境で実行してみたところ、以下のようにパス文字列を取得できました。

C:\Users\ユーザー\AppData\Local\Packages\38eaebae省略....\LocalState

[UWP][フォルダー操作] インストールディレクトリを取得する

アプリケーションがインストールされているディレクトリを取得したい場合は Windows.ApplicationModel.Package.Current.InstalledLocation を使用します。

これによりアプリのインストールディレクトリを表す StorageFolderを取得することができます。

StorageFolder型なので、パス文字列を取得したい場合には以下のようなコードを記述します。

Windows.Storage.StorageFolder installDir = 
    Windows.ApplicationModel.Package.Current.InstalledLocation;

string path = installDir.Path;

現在作成中のアプリをデバッグ環境で実行してみたところ、以下のようにパス文字列を取得できました。

C:\Users\ユーザー\Documents\Visual Studio 2015\Projects\FileAccessSample\FileAccessSample\bin\x86\Debug\AppX

[UWP][ファイル操作] ファイルが保存できたかを確認する

前回に引き続き、今回もファイルの保存について見ていきます。

前回までのコードは以下の通りです。

private async void btnSave_Click(object sender, RoutedEventArgs e)
{
    var filePicker = new Windows.Storage.Pickers.FileSavePicker();

    // ユーザーが保存する場所
    filePicker.SuggestedStartLocation =
        Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;

    // 拡張子の種類を追加
    filePicker.FileTypeChoices.Add("テキストファイル", new List<string>() { ".txt" });
    filePicker.FileTypeChoices.Add("リッチテキストファイル", new List<string>() { ".rtf" });

    // ファイル名の候補
    filePicker.SuggestedFileName = "新しいドキュメント";

    // 名前を付けて保存ダイアログを表示
    Windows.Storage.StorageFile file = await filePicker.PickSaveFileAsync();

    if (file != null)
    {
        await Windows.Storage.FileIO.WriteTextAsync(file, textBox.Text);
    }
}

今回は、WriteTextAsyncメソッドでファイル保存命令を実行後、ファイル保存ができたかを確認する処理を追加します。

ファイルが保存できたかどうかを確認するにはCachedFileManager.CompleteUpdatesAsyncメソッドを使用します。

このメソッドの引数には、名前を付けて保存ダイアログの戻り値を渡します。

ファイルが正常に保存できた場合は、CachedFileManager.CompleteUpdatesAsyncメソッドはWindows.Storage.Provider.FileUpdateStatus.Completeを返します。よってif文で状態を確認し、正常に保存できた場合の処理、保存に失敗したい場合の処理を記述できるようになります。

コード例を以下に示します。

Windows.Storage.Provider.FileUpdateStatus status =
    await Windows.Storage.CachedFileManager.CompleteUpdatesAsync(file);

if (status == Windows.Storage.Provider.FileUpdateStatus.Complete)
{
    // 正常に保存された場合の処理
}
else
{
    // 保存できなかった場合の処理
}

[UWP][ファイル操作] ファイルを保存する

前回は名前を付けて保存ダイアログを表示しました。

以下に前回のコードを再掲します。

private async void btnSave_Click(object sender, RoutedEventArgs e)
{
    var filePicker = new Windows.Storage.Pickers.FileSavePicker();

    // ユーザーが保存する場所
    filePicker.SuggestedStartLocation =
        Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;

    // 拡張子の種類を追加
    filePicker.FileTypeChoices.Add("テキストファイル", new List<string>() { ".txt" });
    filePicker.FileTypeChoices.Add("リッチテキストファイル", new List<string>() { ".rtf" });

    // ファイル名の候補
    filePicker.SuggestedFileName = "新しいドキュメント";

    // 名前を付けて保存ダイアログを表示
    Windows.Storage.StorageFile file = await filePicker.PickSaveFileAsync();
}

今回は、その続きとしてテキストをファイルに保存する処理を作成します。

テキストをファイルに保存するには、WriteTextAsyncメソッドを使用します。第1引数には名前を付けて保存ダイアログの戻り値、第2引数にはファイルに書き込むテキストを指定します。

前回のコード(名前を付けて保存ダイアログのコード)の最後に、以下コードを追加してください。

最初のif文で、保存ボタンを押したかどうかを判定します。保存ボタンを押している場合はfile変数はnull以外になります。

あとは、WriteTextAsyncメソッドを使用して、ファイルに書き込みます。

if (file != null)
{
    await Windows.Storage.FileIO.WriteTextAsync(file, textBox.Text);
}

 

 

 

[UWP][ファイル操作] 名前を付けて保存ダイアログを表示する

名前を付けて保存ダイアログを表示するには、FileSavePickerを使用します。

名前を付けて保存ダイアログの表示を確認するために、新規でプロジェクトを作成し MainPage.xaml に Buttonを配置し、以下の通りClickイベント作成します。

private async void btnSave_Click(object sender, RoutedEventArgs e)
{
    var filePicker = new Windows.Storage.Pickers.FileSavePicker();

    // ユーザーが保存する場所
    filePicker.SuggestedStartLocation =
        Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;

    // 拡張子の種類を追加
    filePicker.FileTypeChoices.Add("テキストファイル", new List<string>() { ".txt" });
    filePicker.FileTypeChoices.Add("リッチテキストファイル", new List<string>() { ".rtf" });

    // ファイル名の候補
    filePicker.SuggestedFileName = "新しいドキュメント";

    // 名前を付けて保存ダイアログを表示
    Windows.Storage.StorageFile file = await filePicker.PickSaveFileAsync();
}

FileSavePickerのインスタンス(この例では変数filePicker)を作成したら、ダイアログが開かれたときに最初に表示するフォルダーをSuggestedStartLocationプロパティで設定します。ここではDocumentLibraryを設定しています。DocumentLibraryはユーザーの「ドキュメント」フォルダになります。

続いて、ユーザーが保存可能なファイルの拡張子を FileTypeChoicees.Addメソッドで指定しています。第1引数にファイル種類の説明を、第2引数には拡張子を指定します。第2引数に指定する拡張子は「.txt」のように、ドット記号から始めてください。「*.txt」はNGです。

「ファイル名」欄に名前の候補を表示したい場合は、SuggestedFleNameプロパティに候補名を設定します。

最後に、PickSaveFileAsyncメソッドを使用してダイアログを表示します。このメソッドは非同期なのでawaitキーワードが必要です。よってClickイベント側にはasyncキーワードが必要です。

このサンプルを実行すると、以下のようなダイアログが表示されます。

名前を付けて保存ダイアログ