ピッカーによるファイルの保存
重要な API
FileSavePicker を使ってユーザーがアプリで保存するファイルの名前とその保存場所を指定できるようにします。
Note
完全なサンプルについては、「File picker sample」 (ファイル ピッカーのサンプル) を参照してください。
Note
デスクトップ アプリ (WinUI 3 アプリを含む) では、Windows.Storage.Pickers のファイルピッカーおよびフォルダー ピッカーを使用できます。 ただし、これらの API は昇格されたアプリで使用できるように設計されていないため、デスクトップ アプリを実行するために昇格が必要である場合は、別のアプローチが必要になります。 例については、「FileSavePicker」を参照してください。
前提条件
ユニバーサル Windows プラットフォーム (UWP) アプリの非同期プログラミングについての理解
C# や Visual Basic での非同期アプリの作成方法については、「C# または Visual Basic での非同期 API の呼び出し」をご覧ください。 C++ での非同期アプリの作成方法については、「C++ での非同期プログラミング」をご覧ください。
場所へのアクセス許可
「ファイル アクセス許可」をご覧ください。
FileSavePicker: 手順
FileSavePicker を使って、ユーザーが保存するファイルの名前、種類、場所を指定できるようにします。 ファイル ピッカー オブジェクトを作成、カスタマイズ、および表示し、選ばれたファイルを表す返された StorageFile オブジェクトを使ってデータを保存します。
FileSavePicker を作成してカスタマイズする
var savePicker = new Windows.Storage.Pickers.FileSavePicker(); savePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary; // Dropdown of file types the user can save the file as savePicker.FileTypeChoices.Add("Plain Text", new List<string>() { ".txt" }); // Default file name if the user does not type one in or select a file to replace savePicker.SuggestedFileName = "New Document";
ファイル ピッカー オブジェクトの、ユーザーとアプリに関連するプロパティを設定します。 この例では、3 つのプロパティ SuggestedStartLocation、FileTypeChoices、および SuggestedFileName を設定します。
このサンプルでは LocalFolder を使って、ドキュメントまたはテキスト ファイルを保存する場所として SuggestedStartLocation をアプリのローカル フォルダーに設定しています。 SuggestedStartLocation を保存するファイルの種類 (音楽、画像、ビデオ、ドキュメントなど) に適切な場所に設定します。 ユーザーは、開始場所から別の場所に移動できます。
サンプルでは、保存したファイルを確実にアプリから開くことができるように、サポートするファイルの種類 (Microsoft Word 文書とテキスト ファイル) を FileTypeChoices を使って指定しています。 指定したすべてのファイルの種類をアプリはサポートする必要があります。 ユーザーは、ファイルの種類を指定して保存できます。 また、別のファイルの種類を選んで、ファイルの種類を変更することもできます。 既定では、リストの先頭にあるファイルの種類が選択されます。これを制御するには、DefaultFileExtension プロパティを設定します。
Note
また、ファイル ピッカーでは、現在選ばれているファイルの種類を使って表示されるファイルがフィルター処理され、選ばれているファイルの種類に一致するファイルの種類だけがユーザーに表示されます。
- ユーザーの入力の手間を多少なりとも軽減するために、この例では SuggestedFileName を設定しています。 提示するファイル名は、ユーザーが保存するファイルにできる限り関係のあるものにします。 たとえば、Word のように、ファイルが既にある場合はその名前を提示し、まだ名前のないファイルを保存している場合はドキュメントの 1 行目を提示します。
Note
FileSavePicker オブジェクトでは、PickerViewMode.List 表示モードを使ってファイル ピッカーが表示されます。
FileSavePicker を表示して選ばれたファイルに保存する
ファイル ピッカーを表示するには、PickSaveFileAsync メソッドを呼び出します。 ユーザーが名前、ファイルの種類、場所を指定し、ファイルの保存を確定すると、PickSaveFileAsync は保存するファイルを表す StorageFile オブジェクトを返します。 これでファイルの読み取りおよび書き込みアクセスが付与されるため、このファイルをキャプチャして処理できます。
Windows.Storage.StorageFile file = await savePicker.PickSaveFileAsync(); if (file != null) { // Prevent updates to the remote version of the file until // we finish making changes and call CompleteUpdatesAsync. Windows.Storage.CachedFileManager.DeferUpdates(file); // write to file await Windows.Storage.FileIO.WriteTextAsync(file, "file contents"); // Let Windows know that we're finished changing the file so // the other app can update the remote version of the file. // Completing updates may require Windows to ask for user input. Windows.Storage.Provider.FileUpdateStatus status = await Windows.Storage.CachedFileManager.CompleteUpdatesAsync(file); if (status == Windows.Storage.Provider.FileUpdateStatus.Complete) { this.textBlock.Text = "File " + file.Name + " was saved."; } else { this.textBlock.Text = "File " + file.Name + " couldn't be saved."; } } else { this.textBlock.Text = "Operation cancelled."; }
この例では、ファイルが有効であることをチェックし、ファイルにそのファイル名を書き込みます。 また、「ファイルの作成、書き込み、および読み取り」もご覧ください。
ヒント
その他の処理を実行する前に、必ず保存されたファイルをチェックしてファイルの有効性を確認する必要があります。 その後、アプリに適したコンテンツをファイルに保存できるほか、選ばれたファイルが有効でない場合は適切な動作を実行できます。