Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Beim Erstellen von Windows-Apps mit dem Windows App SDK müssen Benutzer häufig Dateien wie Dokumente, Bilder oder andere Inhalte an bestimmten Speicherorten auf ihrem Gerät speichern. Das Windows App SDK bietet die FileSavePicker-Klasse zum Erstellen einer konsistenten, benutzerfreundlichen Benutzeroberfläche, mit der Benutzer auswählen können, wo Dateien gespeichert werden sollen und was sie nennen sollen.
In diesem Artikel erfahren Sie, wie Sie eine Dateispeicherauswahl in Ihrer WinUI-App implementieren. Sie lernen, wie Sie das Erscheinungsbild und das Verhalten des Pickers konfigurieren, die Auswahl des Benutzers bearbeiten und Inhalte am gewählten Speicherort speichern.
Die Dateiauswahl zum Speichern kann mit einem vorgeschlagenen Dateinamen und anderen Standardeinstellungen aufgefüllt werden, um Benutzern das Speichern ihrer Dateien zu erleichtern:
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie folgendes haben:
- Ein WinUI-Projekt, das mit dem Windows App SDK eingerichtet wurde
- Grundlegende Kenntnisse mit C# und XAML
- Grundlegendes zu asynchronen/await-Mustern in C#
Wichtige APIs
Die folgenden APIs werden in diesem Thema verwendet:
Verwenden Sie FileSavePicker , damit Benutzer den Namen und Speicherort angeben können, an dem ihre App eine Datei speichern soll.
Speichern eines Dokuments mit FileSavePicker
Verwenden Sie ein FileSavePicker-Steuerelement , damit Ihre Benutzer den Namen, den Typ und den Speicherort einer zu speichernden Datei angeben können. Erstellen, Anpassen und Anzeigen eines Dateiauswahlobjekts und Speichern von Daten über das zurückgegebene StorageFile-Objekt , das die ausgewählte Datei darstellt.
Erstellen und Anpassen des FileSavePicker.Create and customize the FileSavePicker. Erstellen Sie zunächst ein neues FileSavePicker-Objekt , und legen Sie dann Eigenschaften für das Objekt fest, um die Dateiauswahl für Ihre App und Ihre Benutzer anzupassen:
using Microsoft.Windows.Storage.Pickers; ... var savePicker = new FileSavePicker(this.AppWindow.Id) { // (Optional) Specify the initial location for the picker. // If the specified location doesn't exist on the user's machine, it falls back to the DocumentsLibrary. // If not set, it defaults to PickerLocationId.Unspecified, and the system will use its default location. SuggestedStartLocation = PickerLocationId.DocumentsLibrary, // (Optional) specify the default file name. If not specified, use system default. SuggestedFileName = "My Document", // (Optional) Sets the folder that the file save dialog displays when it opens. // If not specified or the specified path doesn't exist, defaults to the last folder the user visited. SuggestedFolder = @"C:\MyFiles", // (Optional) specify the text displayed on the commit button. // If not specified, the system uses a default label of "Save" (suitably translated). CommitButtonText = "Save Document", // (Optional) categorized extension types. If not specified, "All Files (*.*)" is allowed. // Note that when "All Files (*.*)" is allowed, end users can save a file without an extension. FileTypeChoices = { { "Documents", new List<string> { ".txt", ".doc", ".docx" } } }, // (Optional) specify the default file extension (will be appended to SuggestedFileName). // If not specified, no extension will be appended. DefaultFileExtension = ".txt", };In diesem Beispiel werden sechs Eigenschaften festgelegt: SuggestedStartLocation, SuggestedFileName, SuggestedFolder, CommitButtonText, FileTypeChoices und DefaultFileExtension.
Da der Benutzer ein Dokument oder eine Textdatei speichert, legt das Beispiel SuggestedStartLocation mithilfe des DocumentsLibrary-Werts aus der PickerLocationId-Enum auf den Ordner der Dokumentenbibliothek fest. Legen Sie " SuggestedStartLocation " auf einen Speicherort fest, der für den Dateityp geeignet ist, der gespeichert wird, z. B. Musik, Bilder, Videos oder Dokumente. Vom Startspeicherort aus kann der Benutzer zu anderen Speicherorten navigieren und diese auswählen.
Um dem Benutzer einige Eingaben zu ersparen, legt das Beispiel einen SuggestedFileName fest. Der vorgeschlagene Dateiname sollte für die gespeicherte Datei relevant sein. Beispielsweise können Sie wie Word den vorhandenen Dateinamen vorschlagen, wenn vorhanden ist, oder die erste Zeile eines Dokuments, wenn der Benutzer eine Datei speichert, die noch keinen Namen hat.
Verwenden Sie die FileTypeChoices-Eigenschaft , wenn Sie die vom Beispiel unterstützten Dateitypen angeben (Microsoft Word-Dokumente und Textdateien). Dadurch wird sichergestellt, dass die App die Datei nach dem Speichern öffnen kann. Stellen Sie sicher, dass alle von Ihnen angegebenen Dateitypen von Ihrer App unterstützt werden. Benutzer können ihre Datei als einen der von Ihnen angegebenen Dateitypen speichern. Sie können den Dateityp auch ändern, indem sie einen anderen der von Ihnen angegebenen Dateitypen auswählen. Die erste Dateiformatauswahl in der Liste wird standardmäßig ausgewählt. Um dies zu steuern, legen Sie die DefaultFileExtension-Eigenschaft fest.
Hinweis
Die Dateiauswahl verwendet außerdem den aktuell ausgewählten Dateityp, um zu filtern, welche Dateien angezeigt werden, sodass dem Benutzer nur Dateitypen angezeigt werden, die den ausgewählten Dateitypen entsprechen.
Der entsprechende C++-Code für dieses Beispiel lautet wie folgt:
#include <winrt/Microsoft.Windows.Storage.Pickers.h> using namespace winrt::Microsoft::Windows::Storage::Pickers; FileSavePicker savePicker(AppWindow().Id()); // (Optional) Specify the initial location for the picker. // If the specified location doesn't exist on the user's machine, it falls back to the DocumentsLibrary. // If not set, it defaults to PickerLocationId.Unspecified, and the system will use its default location. savePicker.SuggestedStartLocation(PickerLocationId::DocumentsLibrary); // (Optional) specify the default file name. If not specified, use system default. savePicker.SuggestedFileName(L"NewDocument"); // (Optional) Sets the folder that the file save dialog displays when it opens. // If not specified or the specified path doesn't exist, defaults to the last folder the user visited. savePicker.SuggestedFolder = L"C:\\MyFiles", // (Optional) specify the text displayed on the commit button. // If not specified, the system uses a default label of "Save" (suitably translated). savePicker.CommitButtonText(L"Save Document"); // (Optional) categorized extension types. If not specified, "All Files (*.*)" is allowed. // Note that when "All Files (*.*)" is allowed, end users can save a file without an extension. savePicker.FileTypeChoices().Insert(L"Text", winrt::single_threaded_vector<winrt::hstring>({ L".txt" })); // (Optional) specify the default file extension (will be appended to SuggestedFileName). // If not specified, no extension will be appended. savePicker.DefaultFileExtension(L".txt");Hinweis
FileSavePicker-Objekte zeigen die Dateiauswahl mithilfe des PickerViewMode.List-Ansichtsmodus an.
Als Nächstes zeigen wir FileSavePicker an und speichern dort am ausgewählten Dateispeicherort. Zeigen Sie die Dateiauswahl durch Aufrufen von PickSaveFileAsync an. Nachdem der Benutzer den Namen, den Dateityp und den Speicherort angegeben und bestätigt hat, dass die Datei gespeichert wird, gibt PickSaveFileAsync ein einfaches FilePickResult - Objekt zurück, das den Pfad zur gespeicherten Datei und den Dateinamen enthält. Sie können diese Datei erfassen und verarbeiten, wenn Sie Lese- und Schreibzugriff darauf haben.
using Microsoft.Windows.Storage.Pickers; ... var savePicker = new FileSavePicker(this.AppWindow.Id); var result = await savePicker.PickSaveFileAsync(); if (result != null) { if (!System.IO.File.Exists(result.Path)) { // Create a file and write to it. System.IO.File.WriteAllText(result.Path, "Hello world." + Environment.NewLine); } else { // Append to the existing file. System.IO.File.AppendAllText(result.Path, "Hello again." + Environment.NewLine); } } else { this.textBlock.Text = "Operation cancelled."; }Im Beispiel wird überprüft, ob die Datei vorhanden ist, und entweder eine neue Datei erstellt oder an die vorhandene Datei angefügt. Wenn der Benutzer den Vorgang abbricht, lautet
nulldas Ergebnis , und Sie können diesen Fall entsprechend behandeln, z. B. das Anzeigen einer Nachricht für den Benutzer.Tipp
Sie sollten die gespeicherte Datei immer überprüfen, um sicherzustellen, dass sie vorhanden ist und gültig ist, bevor Sie eine andere Verarbeitung durchführen. Anschließend können Sie Inhalte entsprechend ihrer App in der Datei speichern. Ihre App sollte ein geeignetes Verhalten bereitstellen, wenn die ausgewählte Datei ungültig ist.
Dies ist das C++-Äquivalent dieses C#-Beispiels:
#include <winrt/Microsoft.Windows.Storage.Pickers.h> #include <fstream> #include <string> using namespace winrt::Microsoft::Windows::Storage::Pickers; FileSavePicker savePicker(AppWindow().Id()); auto result{ co_await savePicker.PickSaveFileAsync() }; if (result) { // Check if the file exists. if (!std::ifstream(result.Path().c_str())) { std::ofstream outFile(result.Path().c_str()); outFile << "Hello world."; outFile.close(); } else { // Append to the existing file. std::ofstream outFile(result.Path().c_str(), std::ios::app); outFile << "Hello again."; outFile.close(); } } else { textBlock().Text(L"Operation cancelled."); }
Verwandte Inhalte
Windows developer