Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows Uygulama SDK'sı ile Windows uygulamaları oluştururken kullanıcıların genellikle belge, görüntü veya diğer içerik gibi dosyaları cihazlarında belirli konumlara kaydetmesi gerekir. Windows Uygulama SDK'sı, kullanıcıların dosyaların nereye kaydedileceğini ve ne ad verileceğini seçmesine olanak tanıyan tutarlı, kullanıcı dostu bir arabirim oluşturmak için FileSavePicker sınıfını sağlar.
Bu makalede, WinUI uygulamanızda dosya kaydetme seçicisini nasıl uygulayabileceğiniz gösterilmektedir. Seçicinin görünümünü ve davranışını yapılandırmayı, kullanıcının seçimini işlemeyi ve içeriği seçilen konuma kaydetmeyi öğreneceksiniz.
Kaydetme dosyası seçici, kullanıcıların dosyalarını kaydetmesini kolaylaştırmak için önerilen bir dosya adı ve diğer varsayılan ayarlarla doldurulabilir:
Önkoşullar
Başlamadan önce şunları yaptığınızdan emin olun:
- Windows Uygulama SDK'sı ile ayarlanmış bir WinUI projesi
- C# ve XAML ile ilgili temel bilgiler
- C#'ta async/await desenlerini anlama
Önemli API'ler
Bu konuda aşağıdaki API'ler kullanılır:
Kullanıcıların uygulamanızın dosyayı kaydetmesini istedikleri yeri ve adı belirtmesine izin vermek için FileSavePicker'ı kullanın.
FileSavePicker ile belge kaydetme
Kullanıcılarınızın kaydedilecek dosyanın adını, türünü ve konumunu belirtebilmesi için FileSavePicker kullanın. Bir dosya seçici nesnesi oluşturun, özelleştirin ve gösterin ve ardından seçilen dosyayı temsil eden döndürülen StorageFile nesnesi aracılığıyla verileri kaydedin.
FileSavePicker'ı oluşturun ve özelleştirin. Yeni bir FileSavePicker nesnesi oluşturarak başlayın ve ardından nesnedeki özellikleri ayarlayarak uygulamanız ve kullanıcılarınız için dosya seçiciyi özelleştirin:
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", };Bu örnek altı özellik ayarlar: SuggestedStartLocation, SuggestedFileName, SuggestedFolder, CommitButtonText, FileTypeChoices ve DefaultFileExtension.
Kullanıcı bir belgeyi veya metin dosyasını kaydettiği için, örnek SuggestedStartLocation'ı DocumentsLibrary değerini PickerLocationId Sabit Listesi'nden kullanarak belgeler kitaplığı klasörüne ayarlar. SuggestedStartLocation değerini kaydedilmekte olan dosya türüne uygun bir konuma ayarlayın( örneğin, Müzik, Resimler, Videolar veya Belgeler). Kullanıcı başlangıç konumundan başka konumlara gidebilir ve bu konumları seçebilir.
Kullanıcının daha az yazmasını sağlamak için örnek bir SuggestedFileName ayarlanır. Önerilen dosya adı, kaydedilen dosyayla ilgili olmalıdır. Örneğin, Word gibi, varsa var olan dosya adını veya kullanıcı henüz adı olmayan bir dosyayı kaydediyorsa belgenin ilk satırını önerebilirsiniz.
Örneğin desteklediği dosya türlerini (Microsoft Word belgeleri ve metin dosyaları) belirtirken FileTypeChoices özelliğini kullanın. Bu, uygulamanın kaydedildikten sonra dosyayı açabilmesini sağlar. Belirttiğiniz tüm dosya türlerinin uygulamanız tarafından desteklendiğinden emin olun. Kullanıcılar, kendi dosyalarını belirttiğiniz dosya türlerinden herhangi biri olarak kaydedebilir. Ayrıca, belirttiğiniz başka bir dosya türünü seçerek de dosya türünü değiştirebilirler. Listedeki ilk dosya türü seçimi varsayılan olarak seçilir. Bunu denetlemek için DefaultFileExtension özelliğini ayarlayın.
Uyarı
Dosya seçici, yalnızca seçili dosya türleriyle eşleşen dosya türlerinin kullanıcıya görüntülenmesi için o anda seçili olan dosya türünü hangi dosyaların görüntülendiğini filtrelemek için de kullanır.
Bu örnek için eşdeğer C++ kodu aşağıdaki gibidir:
#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");Uyarı
FileSavePicker nesneleri PickerViewMode.List görünüm modunu kullanarak dosya seçiciyi görüntüler.
Şimdi FileSavePicker'ı gösterelim ve seçilen dosya konumuna kaydedelim. PickSaveFileAsync çağrısı yaparak dosya seçiciyi görüntüleyin. Kullanıcı adı, dosya türünü ve konumu belirtip dosyayı kaydetmeyi onayladıktan sonra PickSaveFileAsync , kaydedilen dosyanın ve dosya adının yolunu içeren basit bir FilePickResult nesnesi döndürür. Okuma ve yazma erişiminiz varsa bu dosyayı yakalayıp işleyebilirsiniz.
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."; }Örnek, dosyanın var olup olmadığını denetler ve yeni bir dosya oluşturur veya var olan dosyanın sonuna ekler. Kullanıcı işlemi iptal ederse sonuç şu şekilde olur:
null, ve bu durumu uygun şekilde işleyebilirsiniz, örneğin kullanıcıya ileti görüntüleme.Tavsiye
Başka bir işlem gerçekleştirmeden önce, kayıtlı dosyanın var olduğundan ve geçerli olduğundan emin olmak için her zaman dosyayı denetlemeniz gerekir. Ardından, içeriği uygulamanıza uygun şekilde dosyaya kaydedebilirsiniz. Seçilen dosya geçerli değilse uygulamanız uygun davranışı sağlamalıdır.
Bu C# örneğinin C++ eşdeğeri aşağıda verilmiştir:
#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."); }
İlgili içerik
Windows Uygulama SDK'sı ile dosyalar, klasörler ve kitaplıklar
Windows developer