Izin akses file

Aplikasi WinUI dapat mengakses lokasi sistem file tertentu secara default. Aplikasi juga dapat mengakses lokasi tambahan melalui pemilih file, atau dengan mendeklarasikan kemampuan.

Lokasi yang dapat diakses aplikasi WinUI

Saat membuat aplikasi baru, Anda dapat mengakses lokasi sistem file berikut secara default:

Direktori penginstalan aplikasi

Folder tempat aplikasi Anda diinstal pada sistem pengguna.

Ada dua cara utama untuk mengakses file dan folder di direktori penginstalan aplikasi Anda:

  1. Anda dapat mengambil StorageFolder yang mewakili direktori penginstalan aplikasi Anda, seperti ini:

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

    Anda kemudian dapat mengakses file dan folder di direktori menggunakan metode StorageFolder . Dalam contoh, StorageFolder ini disimpan dalam installDirectory variabel . Anda dapat mempelajari selengkapnya tentang bekerja dengan paket aplikasi Anda dan menginstal direktori dari sampel informasi paket Aplikasi di GitHub.

  2. Anda dapat mengambil file langsung dari direktori penginstalan aplikasi dengan menggunakan URI aplikasi, seperti ini:

    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
    }
    

    Ketika GetFileFromApplicationUriAsync selesai, GetFile mengembalikan StorageFile yang mewakili file.txt file di direktori penginstalan aplikasi (file dalam contoh).

    Awalan "ms-appx:///" di URI mengacu pada direktori penginstalan aplikasi. Anda dapat mempelajari selengkapnya tentang menggunakan URI aplikasi di Cara menggunakan URI untuk mereferensikan konten.

Selain itu, dan tidak seperti lokasi lain, Anda juga dapat mengakses file di direktori penginstalan aplikasi dengan menggunakan beberapa aplikasi Win32 dan COM untuk WinUI dan beberapa fungsi Pustaka Standar C/C++ dari Microsoft Visual Studio.

Direktori penginstalan aplikasi adalah lokasi baca-saja. Anda tidak dapat memperoleh akses ke direktori penginstalan melalui pemilih file.

Mengakses lokasi data aplikasi

Folder tempat aplikasi Anda dapat menyimpan data. Folder ini (lokal, roaming, dan sementara) dibuat saat aplikasi Anda diinstal.

Ada dua cara utama untuk mengakses file dan folder dari lokasi data aplikasi Anda:

  1. Gunakan properti ApplicationData untuk mengambil folder data aplikasi.

    Misalnya, Anda dapat menggunakan ApplicationData. LocalFolder untuk mengambil StorageFolder yang mewakili folder lokal aplikasi Anda seperti ini:

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

    Jika Anda ingin mengakses folder roaming atau sementara aplikasi, gunakan properti RoamingFolder atau TemporaryFolder sebagai gantinya.

    Setelah mengambil StorageFolder yang mewakili lokasi data aplikasi, Anda dapat mengakses file dan folder di lokasi tersebut dengan menggunakan metode StorageFolder. Dalam contoh, objek StorageFolder ini disimpan dalam localFolder variabel . Anda dapat mempelajari selengkapnya tentang menggunakan lokasi data aplikasi dari panduan di halaman kelas ApplicationData , dan dengan mengunduh sampel data Aplikasi dari GitHub.

  2. Anda dapat mengambil file langsung dari folder lokal aplikasi dengan menggunakan URI aplikasi, seperti ini:

    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
    

    Ketika GetFileFromApplicationUriAsync selesai, getFile mengembalikan StorageFile yang mewakili file.txt file di folder lokal aplikasi (file dalam contoh).

    Awalan "ms-appdata:///local/" di URI mengacu pada folder lokal aplikasi. Untuk mengakses file di folder roaming atau sementara aplikasi, gunakan "ms-appdata:///roaming/" atau "ms-appdata:///temporary/" sebagai gantinya. Anda dapat mempelajari selengkapnya tentang menggunakan URI aplikasi di Cara memuat sumber daya file.

Selain itu, dan tidak seperti lokasi lain, Anda juga dapat mengakses file di lokasi data aplikasi dengan menggunakan beberapa aplikasi Win32 dan COM untuk WinUI dan beberapa fungsi Pustaka Standar C/C++ dari Visual Studio.

Anda tidak dapat mengakses folder lokal, roaming, atau sementara melalui pemilih file.

Mengakses perangkat yang dapat dilepas

Selain itu, aplikasi Anda dapat mengakses beberapa file di perangkat yang terhubung secara default. Ini adalah opsi jika aplikasi Anda menggunakan ekstensi AutoPlay untuk diluncurkan secara otomatis saat pengguna menghubungkan perangkat, seperti kamera atau drive jempol USB, ke sistem mereka. File yang dapat diakses aplikasi Anda terbatas pada jenis file tertentu yang ditentukan melalui deklarasi Asosiasi Jenis File di manifes aplikasi Anda.

Tentu saja, Anda juga dapat memperoleh akses ke file dan folder pada perangkat yang dapat dilepas dengan memanggil pemilih file (menggunakan FileOpenPicker dan FolderPicker) dan membiarkan pengguna memilih file dan folder untuk diakses aplikasi Anda. Pelajari cara menggunakan penyeleksi file di Buka file dan folder dengan penyeleksi.

Nota

Untuk informasi selengkapnya tentang mengakses kartu SD atau perangkat lain yang dapat dilepas, lihat Mengakses kartu SD.

Folder Unduhan Pengguna

Folder tempat file yang diunduh disimpan secara default.

Secara default, aplikasi Anda hanya dapat mengakses file dan folder di folder Unduhan pengguna yang dibuat aplikasi Anda. Namun, Anda dapat memperoleh akses ke file dan folder di folder Unduhan pengguna dengan memanggil pemilih file (FileOpenPicker atau FolderPicker) sehingga pengguna dapat menavigasi dan memilih file atau folder untuk diakses aplikasi Anda.

  • Anda dapat membuat file di folder Unduhan pengguna seperti ini:

    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
    

    DownloadsFolder. CreateFileAsync memiliki overloading sehingga Anda dapat menentukan apa yang harus dilakukan sistem jika sudah ada file dengan nama yang sama di folder Downloads. Ketika metode ini selesai, mereka mengembalikan StorageFile yang mewakili file yang dibuat. File ini dipanggil newFile dalam contoh.

  • Anda dapat membuat subfolder di folder Unduhan pengguna seperti ini:

    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
    

    UnduhanFolder. CreateFolderAsync kelebihan beban sehingga Anda dapat menentukan apa yang harus dilakukan sistem jika sudah ada subfolder di folder Unduhan yang memiliki nama yang sama. Ketika metode ini selesai, mereka mengembalikan StorageFolder yang mewakili subfolder yang dibuat. File ini dipanggil newFolder dalam contoh.

Mengakses lokasi tambahan

Selain lokasi default, aplikasi dapat mengakses file dan folder tambahan dengan mendeklarasikan kemampuan dalam manifes aplikasi atau dengan memanggil pemilih file untuk memungkinkan pengguna memilih file dan folder untuk diakses aplikasi.

Aplikasi yang mendeklarasikan ekstensi AppExecutionAlias memiliki izin sistem file dari direktori tempat mereka diluncurkan di jendela konsol, dan ke bawah.

Mempertahankan akses ke file dan folder

Saat aplikasi Anda mengakses file atau folder melalui pemilih berkas, aktivasi file, operasi seret dan letakkan, dan lain-lain, aplikasi hanya memiliki akses ke file atau folder tersebut hingga aplikasi dihentikan. Jika Anda ingin mengakses file atau folder secara otomatis di masa mendatang, Anda dapat menambahkannya ke FutureAccessList sehingga aplikasi Anda dapat dengan mudah mengakses item tersebut di masa mendatang. Anda juga dapat menggunakan MostRecentlyUsedList untuk mengelola daftar file yang baru-baru ini digunakan dengan mudah.

Kemampuan untuk mengakses lokasi lain

Tabel berikut ini mencantumkan lokasi tambahan yang dapat Anda akses dengan mendeklarasikan satu atau beberapa kemampuan dan menggunakan Windows.Storage API terkait.

Tempat Kemampuan Windows.Storage API
Semua file yang dapat diakses pengguna. Misalnya: dokumen, gambar, foto, unduhan, desktop, OneDrive, dll. broadFileSystemAccess

Ini adalah kemampuan terbatas. Akses dapat dikonfigurasi dalam Pengaturan > Privasi > Sistem Berkas. Karena pengguna dapat memberikan atau menolak izin kapan saja di Pengaturan, Anda harus memastikan bahwa aplikasi Anda tahan terhadap perubahan tersebut. Jika menemukan bahwa aplikasi Anda tidak memiliki akses, Anda dapat memilih untuk meminta pengguna mengubah pengaturan dengan menyediakan tautan ke artikel akses dan privasi sistem file Windows . Perhatikan bahwa pengguna harus menutup aplikasi, mengalihkan pengaturan, dan menghidupkan ulang aplikasi. Jika mereka beralih ke pengaturan saat aplikasi berjalan, platform akan menangguhkan aplikasi Anda sehingga Anda dapat menyimpan status, lalu menghentikan aplikasi secara paksa untuk menerapkan pengaturan baru. Dalam pembaruan April 2018, default untuk izin adalah Aktif. Dalam pembaruan Oktober 2018, defaultnya adalah Nonaktif.

Jika Anda mengirimkan aplikasi ke Toko yang mendeklarasikan kemampuan ini, Anda harus memberikan deskripsi tambahan tentang mengapa aplikasi Anda membutuhkan kemampuan ini, dan bagaimana aplikasi ingin menggunakannya.

Kemampuan ini berfungsi untuk API di namespace Windows.Storage . Lihat bagian Contoh di akhir artikel ini untuk contoh cara mengaktifkan kemampuan ini di aplikasi Anda.

Catatan: Kemampuan ini tidak didukung di Xbox.
n/a
Documents perpustakaanDokumen

Catatan: Anda harus menambahkan Asosiasi Jenis File ke manifes aplikasi yang mendeklarasikan jenis file tertentu yang dapat diakses aplikasi Anda di lokasi ini.

Gunakan kemampuan ini jika aplikasi Anda:
- Memfasilitasi akses offline lintas platform ke konten OneDrive tertentu menggunakan URL OneDrive atau ID Sumber Daya yang valid
- Menyimpan file terbuka ke OneDrive pengguna secara otomatis saat offline
KnownFolders.DocumentsLibrary
Music perpustakaan musik
Lihat juga File dan folder di pustaka Musik, Gambar, dan Video.
KnownFolders.MusicLibrary
Pictures perpustakaan gambar
Lihat juga File dan folder di pustaka Musik, Gambar, dan Video.
KnownFolders.PicturesLibrary
Videos perpustakaanVideo
Lihat juga File dan folder di pustaka Musik, Gambar, dan Video.
KnownFolders.VideosLibrary
Perangkat yang dapat dilepas penyimpanan lepas pasang

Catatan Anda harus menambahkan Asosiasi Jenis File ke manifes aplikasi yang mendeklarasikan jenis file tertentu yang dapat diakses aplikasi Anda di lokasi ini.

Lihat juga Mengakses kartu SD.
KnownFolders.RemovableDevices
Pustaka grup rumah Setidaknya salah satu kemampuan berikut diperlukan.
- musicLibrary
- pustakaGambar
- perpustakaanVideo
KnownFolders.HomeGroup
Perangkat server media (DLNA) Setidaknya salah satu kemampuan berikut diperlukan.
- musicLibrary
- pustakaGambar
- perpustakaan video
KnownFolders.MediaServerDevices
Folder Universal Naming Convention (UNC) Kombinasi kemampuan berikut diperlukan.

Kemampuan jaringan rumah dan kantor:
- privateNetworkClientServer

Dan setidaknya satu kemampuan internet dan jaringan publik:
- internetClient
- internetClientServer

Dan, jika berlaku, kemampuan kredensial domain:
- otentikasiPerusahaan

Catatan: Anda harus menambahkan Asosiasi Jenis File ke manifes aplikasi yang mendeklarasikan jenis file tertentu yang dapat diakses aplikasi Anda di lokasi ini.
Ambil folder dengan menggunakan:
StorageFolder.GetFolderFromPathAsync

Ambil file menggunakan:
StorageFile.GetFileFromPathAsync

Example

Contoh ini menambahkan kemampuan broadFileSystemAccess yang dibatasi. Selain menentukan kemampuan, rescap namespace harus ditambahkan, dan juga ditambahkan ke IgnorableNamespaces.

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

Nota

Untuk daftar lengkap kemampuan aplikasi, lihat Deklarasi kemampuan aplikasi.