Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Amikor Windows alkalmazásokat készít Windows App SDK, a felhasználóknak gyakran kell fájlokat, például dokumentumokat, képeket vagy egyéb tartalmakat menteniük az eszközük meghatározott pontjaira. A Windows App SDK biztosítja a FileSavePicker osztályt egy konzisztens, felhasználóbarát felület létrehozásához, amellyel a felhasználók kiválaszthatják a fájlok mentési helyét és a nevüket.
Ez a cikk bemutatja, hogyan implementálhat fájlmentés-választót a WinUI-alkalmazásban. Megtudhatja, hogyan konfigurálhatja a választó megjelenését és viselkedését, hogyan kezelheti a felhasználó kiválasztását, és hogyan mentheti a tartalmat a kiválasztott helyre.
A mentési fájlválasztó feltölthető egy javasolt fájlnévvel és egyéb alapértelmezett beállításokkal, hogy a felhasználók könnyebben menthessék a fájljaikat:
Előfeltételek
Mielőtt hozzákezd, győződjön meg arról, hogy:
- Windows App SDK 1,8-at vagy újabb verziót. Az ebben a cikkben használt
Microsoft.Windows.Storage.PickersAPI-k a Windows App SDK 1.8-ban kerültek bevezetésre. Ha a projekt egy korábbi verziót céloz meg, az örökölt megközelítéshez tekintse meg a WinRT-választók használata HWND-interop használatával című témakört. - WinUI-projekt létrehozva a Windows App SDK-val
- A C# és az XAML alapszintű ismerete
- Az aszinkron/várakozási minták ismerete a C-ben#
Fontos API-k
Ebben a témakörben a következő API-kat használjuk:
A FileSavePicker használatával lehetővé teszi a felhasználók számára, hogy megadják azt a nevet és helyet, ahová az alkalmazás menteni szeretné a fájlt.
Dokumentum mentése a FileSavePicker használatával
Használjon FileSavePickert , hogy a felhasználók meg tudják adni a menteni kívánt fájl nevét, típusát és helyét. Hozzon létre, szabjon testre és jelenítsen meg egy fájlválasztó objektumot, majd mentse az adatokat a visszaadott PickFileResult használatával, amely tartalmazza a kiválasztott fájl elérési útját. Ha szüksége van a fájlnévre, abból az elérési útból származtathatja.
- Hozza létre és szabja testre a FileSavePickert. Először hozzon létre egy új FileSavePicker-objektumot , majd állítsa be az objektum tulajdonságait az alkalmazás és a felhasználók fájlválasztójának testreszabásához:
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",
};
#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");
Ez a példa hat tulajdonságot állít be: SuggestedStartLocation, SuggestedFileName, SuggestedFolder, CommitButtonText, FileTypeChoices és DefaultFileExtension.
Mivel a felhasználó egy dokumentumot vagy szövegfájlt ment, a minta a PickerLocationId Enum DocumentsLibrary értékével állítja be a SuggestedStartLocation fájlt a dokumentumtár mappájába. Állítsa a SuggestedStartLocation elemet a mentett fájl típusának megfelelő helyre, például zene, képek, videók vagy dokumentumok. A kezdőhelyen a felhasználó más helyekre is navigálhat és kijelölhet más helyeket.
A felhasználó gépelésének mentéséhez a példa egy SuggestedFileName nevet állít be. A javasolt fájlnévnek relevánsnak kell lennie a mentett fájlhoz. Például, például Word, javasolhatja a meglévő fájlnevet, ha van ilyen, vagy a dokumentum első sora, ha a felhasználó olyan fájlt ment, amely még nem rendelkezik névvel.
Használja a FileTypeChoices tulajdonságot a minta által támogatott fájltípusok (Microsoft Word dokumentumok és szövegfájlok) spektrálásakor. Ez biztosítja, hogy az alkalmazás a mentés után meg tudja nyitni a fájlt. Győződjön meg arról, hogy az alkalmazás minden megadott fájltípust támogat. A felhasználók a megadott fájltípusok bármelyikeként menthetik a fájljukat. Módosíthatják a fájltípust is, ha kiválasztanak egy másikat a megadott fájltípusok közül. A lista első fájltípus-kiválasztása alapértelmezés szerint ki lesz választva. Ennek szabályozásához állítsa be a DefaultFileExtension tulajdonságot.
Megjegyzés:
A fájlválasztó a jelenleg kijelölt fájltípussal is szűri a megjelenített fájlokat, így csak a kijelölt fájltípusoknak megfelelő fájltípusok jelennek meg a felhasználó számára.
Megjegyzés:
A FileSavePicker-objektumok a PickerViewMode.List nézet módban jelenítik meg a fájlválasztót.
- Ezután jelenítse meg a FileSavePickert , és mentse a kiválasztott fájlhelyre. A PickSaveFileAsync meghívásával jelenítse meg a fájlválasztót. Miután a felhasználó megadja a nevet, a fájltípust és a helyet, és megerősíti a fájl mentését, a PickSaveFileAsync egy egyszerűsített PickFileResult objektumot ad vissza, amely tartalmazza a mentett fájl elérési útját. Ha szüksége van a fájlnévre, abból az elérési útból származtathatja. Ha olvasási és írási hozzáféréssel rendelkezik, rögzítheti és feldolgozhatja a fájlt.
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.";
}
#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.");
}
A példa ellenőrzi, hogy a fájl létezik-e, és vagy létrehoz egy új fájlt, vagy hozzáfűzi a meglévő fájlhoz. Ha a felhasználó megszakítja a műveletet, az eredmény az lesz null, és ezt az esetet megfelelően kezelheti, például megjeleníthet egy üzenetet a felhasználónak.
Jótanács
Minden további feldolgozás előtt ellenőrizze, hogy létezik-e és érvényes-e a mentett fájl. Ezután az alkalmazásnak megfelelően mentheti a tartalmat a fájlba. Az alkalmazásnak megfelelő viselkedést kell biztosítania, ha a kiválasztott fájl érvénytelen.
Kapcsolódó tartalom
- Microsoft.Windows.Storage.Pickers névtér
- Fájlok és mappák megnyitása Windows App SDK választóval
- Fájlok, mappák és könyvtárak a Windows App SDK-val
- Ablakfogópont (HWND) lekérése
- .NET-alkalmazásközi API-k meghívása
- A CoreWindow-tól függő WinRT felhasználói felületi objektumok megjelenítése
- WinUI-katalógus fájlválasztó mintája
Windows developer