Dosya erişim izinleri

WinUI uygulamaları varsayılan olarak belirli dosya sistemi konumları erişebilir. Uygulamalar ayrıca dosya seçici aracılığıyla veya özellikleri bildirerek ek konumlara erişebilir.

WinUI uygulamalarının erişebileceği konumlar

Yeni bir uygulama oluşturduğunuzda, varsayılan olarak aşağıdaki dosya sistemi konumları erişebilirsiniz:

Uygulama yükleme dizini

Uygulamanızın kullanıcının sisteminde yüklü olduğu klasör.

Uygulamanızın yükleme dizinindeki dosya ve klasörlere erişmenin iki birincil yolu vardır:

  1. Uygulamanızın yükleme dizinini temsil eden bir StorageFolder alabilirsiniz, örneğin:

    Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
    
    #include <winrt/Windows.Storage.h>
    ...
    Windows::Storage::StorageFolder installedLocation{ Windows::ApplicationModel::Package::Current().InstalledLocation() };
    

    Ardından StorageFolder yöntemlerini kullanarak dizindeki dosya ve klasörlere erişebilirsiniz. Örnekte, bu StorageFolder değişkeninde installDirectory depolanır. GitHub'da Uygulama paketi bilgileri örneğinden uygulama paketinizle çalışma ve dizini yükleme hakkında daha fazla bilgi edinebilirsiniz.

  2. Aşağıdaki gibi bir uygulama URI'sini kullanarak doğrudan uygulamanızın yükleme dizininden bir dosya alabilirsiniz:

    using Windows.Storage;            
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///file.txt"));
    
    Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
    {
        Windows::Storage::StorageFile file{
            co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{L"ms-appx:///file.txt"})
        };
        // Process file
    }
    

    GetFileFromApplicationUriAsync tamamlandığında, uygulamanın yükleme dizinindeki (örnekte) dosyayı temsil eden file.txt bir file döndürür.

    URI'deki "ms-appx:///" ön eki, uygulamanın yükleme dizinine başvurur. İçerik başvurusu yapmak için URI'leri kullanma bölümünde uygulama URI'lerini kullanma hakkında daha fazla bilgi edinebilirsiniz.

Ayrıca, diğer konumlardan farklı olarak, bazı WinUI uygulamaları için Win32 ve COM ileMicrosoft Visual Studio'dan bazı C/C++ Standart Kitaplığı işlevlerini kullanarak uygulama yükleme dizininizdeki dosyalara da erişebilirsiniz.

Uygulamanın yükleme dizini salt okunur bir konumdur. Dosya seçici aracılığıyla yükleme dizinine erişemezsiniz.

Uygulama veri konumları'ne erişme

Uygulamanızın verileri depoladığı klasörler. Bu klasörler (yerel, dolaşım ve geçici) uygulamanız yüklendiğinde oluşturulur.

Uygulamanızın veri konumlarından dosya ve klasörlere erişmenin iki birincil yolu vardır:

  1. Uygulama veri klasörünü almak için ApplicationData özelliklerini kullanın.

    Örneğin, ApplicationData, LocalFolder'ı kullanarak, uygulamanızın yerel klasörünü temsil eden bir StorageFolder alabilirsiniz:

    using Windows.Storage;
    StorageFolder localFolder = ApplicationData.Current.LocalFolder;
    
    Windows::Storage::StorageFolder storageFolder{
        Windows::Storage::ApplicationData::Current().LocalFolder()
    };
    

    Uygulamanızın dolaşım veya geçici klasörüne erişmek istiyorsanız bunun yerine RoamingFolder veya TemporaryFolder özelliğini kullanın.

    Uygulama veri konumunu temsil eden bir StorageFolder aldıktan sonra StorageFolder yöntemlerini kullanarak bu konumdaki dosyalara ve klasörlere erişebilirsiniz. Örnekte, bu StorageFolder nesneleri değişkeninde localFolder depolanır. Uygulama verileri konumlarını kullanma hakkında daha fazla bilgi edinmek için ApplicationData sınıf sayfasındaki yönergelerden ve GitHub'dan Uygulama verileri örneğini indirebilirsiniz.

  2. Aşağıdaki gibi bir uygulama URI'sini kullanarak doğrudan uygulamanızın yerel klasöründen bir dosya alabilirsiniz:

    using Windows.Storage;
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/file.txt"));
    
    Windows::Storage::StorageFile file{
        co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{ L"ms-appdata:///local/file.txt" })
    };
    // Process file
    

    GetFileFromApplicationUriAsync tamamlandığında, uygulamanın yerel klasöründeki (örnekte) dosyayı temsil file.txt eden bir file döndürür.

    URI'deki "ms-appdata:///local/" ön eki, uygulamanın yerel klasörüne başvurur. Uygulamanın dolaşım veya geçici klasörlerindeki dosyalara erişmek için bunun yerine "ms-appdata:///roaming/" veya "ms-appdata:///temporary/" kullanın. Dosya kaynaklarını yükleme bölümünde uygulama URI'lerini kullanma hakkında daha fazla bilgi edinebilirsiniz.

Ayrıca, diğer konumlardan farklı olarak, Bazı WinUI uygulamaları için Win32 ve COM ve Visual Studio'dan bazı C/C++ Standart Kitaplığı işlevlerini kullanarak uygulama veri konumlarınızdaki dosyalara da erişebilirsiniz.

Yerel, dolaşım veya geçici klasörlere dosya seçici aracılığıyla erişemezsiniz.

Çıkarılabilir cihazlara erişme

Ayrıca, uygulamanız bağlı cihazlardaki bazı dosyalara varsayılan olarak erişebilir. Uygulamanız Otomatik Kullan uzantısını kullanarak kullanıcılar sistemlerine kamera veya USB başparmak sürücüsü gibi bir cihaz bağladığında otomatik olarak başlatılıyorsa bu seçenektir. Uygulamanızın erişebileceği dosyalar, uygulama bildiriminizdeki Dosya Türü İlişkilendirme bildirimleri aracılığıyla belirtilen belirli dosya türleriyle sınırlıdır.

Elbette, dosya seçiciyi çağırarak ( FileOpenPicker ve FolderPicker kullanarak) ve kullanıcının uygulamanızın erişebileceği dosya ve klasörleri seçmesine izin vererek çıkarılabilir bir cihazdaki dosyalara ve klasörlere de erişebilirsiniz. Dosya ve klasörleri seçiciyle açma bölümünde dosya seçiciyi kullanmayı öğrenin.

Uyarı

SD karta veya diğer çıkarılabilir cihazlara erişme hakkında daha fazla bilgi için bkz. SD karta erişme.

Kullanıcının İndirmeler klasörü

İndirilen dosyaların varsayılan olarak kaydedildiği klasör.

Varsayılan olarak, uygulamanız yalnızca uygulamanızın oluşturduğu kullanıcının İndirmeler klasöründeki dosya ve klasörlere erişebilir. Ancak, kullanıcıların uygulamanızın erişebileceği dosya veya klasörlerde gezinebilmesi ve seçebilmesi için bir dosya seçici (FileOpenPicker veya FolderPicker) çağırarak kullanıcının İndirilenler klasöründeki dosya ve klasörlere erişebilirsiniz.

  • Kullanıcının İndirmeler klasöründe aşağıdaki gibi bir dosya oluşturabilirsiniz:

    using Windows.Storage;
    StorageFile newFile = await DownloadsFolder.CreateFileAsync("file.txt");
    
    Windows::Storage::StorageFile newFile{
        co_await Windows::Storage::DownloadsFolder::CreateFileAsync(L"file.txt")
    };
    // Process file
    

    İndirilenlerKlasör. CreateFileAsync aşırı yüklenmiş olduğundan, İndirmeler klasöründe aynı ada sahip bir dosya zaten varsa sistemin ne yapacağını belirtebilirsiniz. Bu yöntemler tamamlandığında, oluşturulan dosyayı temsil eden bir StorageFile döndürür. Örnekte bu dosyaya newFile adı verilir.

  • Kullanıcının İndirmeler klasöründe aşağıdaki gibi bir alt klasör oluşturabilirsiniz:

    using Windows.Storage;
    StorageFolder newFolder = await DownloadsFolder.CreateFolderAsync("New Folder");
    
    Windows::Storage::StorageFolder newFolder{
        co_await Windows::Storage::DownloadsFolder::CreateFolderAsync(L"New Folder")
    };
    // Process folder
    

    İndirilenlerKlasör. CreateFolderAsync aşırı yüklenmiştir, böylece İndirmeler klasöründe aynı ada sahip bir alt klasör varsa sistemin ne yapması gerektiğini belirtebilirsiniz. Bu yöntemler tamamlandığında, oluşturulan alt klasörü temsil eden bir StorageFolder döndürür. Bu dosyaya örnekte newFolder adı verilir.

Ek konumlara erişme

Bir uygulama, varsayılan konumlara ek olarak, uygulama bildirimindeki özellikleri bildirerek veya kullanıcının uygulamanın erişebileceği dosya ve klasörleri seçmesine izin vermek üzere bir dosya seçici çağırarak ek dosya ve klasörlere erişebilir.

AppExecutionAlias uzantısını bildiren uygulamalar, konsol penceresinde ve aşağı doğru başlatıldıkları dizinden dosya sistemi izinlerine sahiptir.

Dosya ve klasörlere erişimi koruma

Uygulamanız bir seçici, dosya etkinleştirme, sürükle ve bırak işlemi vb. aracılığıyla bir dosya veya klasör aldığında, uygulama sonlandırılana kadar yalnızca bu dosyaya veya klasöre erişebilir. Gelecekte dosyaya veya klasöre otomatik olarak erişmek isterseniz, uygulamanızın gelecekte bu öğeye kolayca erişebilmesi için bunu FutureAccessList'e ekleyebilirsiniz. En son kullanılan dosyaların listesini kolayca yönetmek için MostRecentlyUsedList'i de kullanabilirsiniz.

Diğer konumlara erişme özellikleri

Aşağıdaki tabloda, bir veya daha fazla özellik bildirerek ve ilişkili Windows.Storage API'sini kullanarak erişebileceğiniz ek konumlar listelenir.

Location Kapasite Windows.Storage API'si
Kullanıcının erişimi olan tüm dosyalar. Örneğin: belgeler, resimler, fotoğraflar, indirmeler, masaüstü, OneDrive vb. broadFileSystemAccess

Bu kısıtlı bir özelliktir. Erişim, Ayarlar > Gizlilik >Dosya sistemi içinde yapılandırılabilir. Kullanıcılar, Ayarlar'da istedikleri zaman izni verebileceğinden veya reddedebildiğinden, uygulamanızın bu değişikliklere dayanıklı olduğundan emin olmanız gerekir. Uygulamanızın erişimi olmadığını fark ederseniz, Windows dosya sistemi erişimi ve gizlilik makalesinin bağlantısını sağlayarak kullanıcıdan ayarı değiştirmesini isteyebilirsiniz. Kullanıcının uygulamayı kapatması, ayarı değiştirmesi ve uygulamayı yeniden başlatması gerektiğini unutmayın. Uygulama çalışırken ayarı değiştirirse platform, durumu kaydedebilmeniz için uygulamanızı askıya alır ve ardından yeni ayarı uygulamak için uygulamayı zorla sonlandırabilir. Nisan 2018 güncelleştirmesinde, izin için varsayılan değer Açık'tır. Ekim 2018 güncelleştirmesinde varsayılan değer Kapalı'dır.

Mağaza'ya bu özelliği bildiren bir uygulama gönderirseniz, uygulamanızın bu özelliğe neden ihtiyaç duyduğuna ve uygulamayı nasıl kullanmayı planladığına ilişkin ek açıklamalar sağlamanız gerekir.

Bu özellik , Windows.Storage ad alanında API'ler için çalışır. Uygulamanızda bu özelliğin nasıl etkinleştirileceğine ilişkin bir örnek için bu makalenin sonundaki Örnek bölümüne bakın.

Not: Bu özellik Xbox'ta desteklenmez.
Yok
Documents belgeler kitaplığı

Not: Uygulama bildiriminize, uygulamanızın bu konumda erişebileceği belirli dosya türlerini bildiren Dosya Türü İlişkilendirmeleri eklemelisiniz.

Uygulamanız şu özelliklere sahipse bu özelliği kullanın:
- Geçerli OneDrive URL'lerini veya Kaynak Kimliklerini kullanarak belirli OneDrive içeriğine platformlar arası çevrimdışı erişimi kolaylaştırır
- Açık dosyaları çevrimdışıyken kullanıcının OneDrive'larına otomatik olarak kaydeder
KnownFolders.DocumentsLibrary
Music müzikKütüphanesi
Ayrıca Bkz. Müzik, Resimler ve Videolar kitaplıklarındaki Dosyalar ve klasörler.
KnownFolders.MusicLibrary
Pictures resim kitaplığı
Ayrıca Bkz. Müzik, Resimler ve Videolar kitaplıklarındaki Dosyalar ve klasörler.
KnownFolders.PicturesLibrary
Videos video kütüphanesi
Ayrıca Bkz. Müzik, Resimler ve Videolar kitaplıklarındaki Dosyalar ve klasörler.
KnownFolders.VideosLibrary
Çıkarılabilir cihazlar çıkarılabilir depolama

Not Uygulamanızın bu konumda erişebileceği belirli dosya türlerini bildiren uygulama bildiriminize Dosya Türü İlişkilendirmeleri eklemeniz gerekir.

Ayrıca bkz. SD karta erişme.
KnownFolders.RemovableDevices
Ev Ağı Kütüphaneleri Aşağıdaki özelliklerden en az biri gereklidir.
- musicLibrary
- resimKitaplığı
- videolarKütüphanesi
KnownFolders.HomeGroup
Medya sunucusu cihazları (DLNA) Aşağıdaki özelliklerden en az biri gereklidir.
- musicLibrary
- resimlerKütüphanesi
- videolarKütüphanesi
KnownFolders.MediaServerDevices
Evrensel Adlandırma Kuralı (UNC) klasörleri Aşağıdaki özelliklerin bir bileşimi gereklidir.

Ev ve iş ağları özelliği:
- privateNetworkClientServer

Ve en az bir internet ve genel ağ özelliği:
- internetClient
- internetClientServer

Uygulanabilir ise, alan adı kimlik bilgileri özelliği:
- kurumsalDoğrulama

Not: Uygulama bildiriminize, uygulamanızın bu konumda erişebileceği belirli dosya türlerini bildiren Dosya Türü İlişkilendirmeleri eklemelisiniz.
Aşağıdakini kullanarak bir klasör alın:
StorageFolder.GetFolderFromPathAsync

Aşağıdakini kullanarak bir dosya alın:
StorageFile.GetFileFromPathAsync

Example

Bu örnek kısıtlı broadFileSystemAccess özelliğini ekler. Özelliği belirtmeye ek olarak, rescap ad alanı eklenmelidir ve ayrıca IgnorableNamespaces öğesine de eklenmelidir.

<Package
  ...
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
    <rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>

Uyarı

Uygulama özelliklerinin tam listesi için bkz. Uygulama özelliği bildirimleri.