使用選擇器儲存檔案
重要 API
- FileSavePicker \(英文\)
- StorageFile
使用 FileSavePicker 讓使用者指定他們想要您的應用程式儲存檔案的名稱和位置。
注意
如需完整範例,請參閱檔案選擇器範例 \(英文\)。
注意
注意:在桌面應用程式中 (包含 WinUI 3 應用程式),您可以使用 Windows.Storage.Pickers 中的檔案和資料夾選擇器。 不過,如果桌面應用程式需要提升權限才能執行,您將需要不同的方法,因為這些 API 並非設計用於提升權限的應用程式。 如需範例,請參閱 FileSavePicker。
必要條件
了解通用 Windows 平台 (UWP) 應用程式的非同步程式設計
您可以參閱在 C# 或 Visual Basic 中呼叫非同步 API,以了解如何使用 C# 或 Visual Basic 撰寫非同步的應用程式。 若要了解如何使用 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";
在與您的使用者和應用程式相關的檔案選擇器物件上設定屬性。 此範例會設定三個屬性:SuggestedStartLocation、FileTypeChoices 和 SuggestedFileName。
由於我們的使用者正在儲存文件或文字檔案,因此範例會使用 LocalFolder 將 SuggestedStartLocation 設定為應用程式的本機資料夾。 將 SuggestedStartLocation 設定為適合所儲存檔案類型的位置,例如,音樂、圖片、影片或文件。 使用者可以從開始位置瀏覽到其他位置。
由於我們想要確定應用程式可以在儲存檔案後開啟檔案,因此我們會使用 FileTypeChoices 來指定範例支援的檔案類型 (Microsoft Word 文件和文字檔案)。 請確定您的應用程式支援您指定的所有檔案類型。 使用者將能夠將其檔案儲存為您指定的任何檔案類型。 您也可以選取您指定的另一個檔案類型來變更檔案類型。 預設會選取清單中的第一個檔案類型選擇:若要加以控制,請設定 DefaultFileExtension 屬性。
注意
因為檔案選擇器也會使用目前選取的檔案類型來篩選它會顯示的檔案,所以只會向使用者顯示符合所選檔案類型的檔案類型。
- 為了讓使用者免於輸入一些資料,此範例會設定 SuggestedFileName。 讓建議的檔案名稱與正在儲存的檔案相關。 以 Word 為例,您可以在有現有的檔案名稱時建議該現有的檔案名稱,或者如果使用者正在儲存尚未有名稱的檔案,則可建議文件的第一行。
注意
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."; }
此範例會檢查檔案是否有效,並將自己的檔案名稱寫入其中。 另請參閱建立、寫入和讀取檔案。
提示
您應該一律檢查儲存的檔案以確定其有效,再繼續執行任何其他的處理。 然後,您可以視應用程式將內容儲存至檔案,並在挑選的檔案無效時提供適當的行為。