Sdílet prostřednictvím


Přístupová oprávnění k souborům

Aplikace univerzální platformy Windows (UPW) mají ve výchozím nastavení přístup k určitým umístěním systému souborů. Aplikace můžou také přistupovat k dalším umístěním prostřednictvím nástroje pro výběr souborů nebo deklarací možností.

Umístění, ke kterým mají aplikace pro UPW přístup

Při vytváření nové aplikace můžete ve výchozím nastavení přistupovat k následujícím umístěním systému souborů:

Instalační adresář aplikace

Složka, ve které je aplikace nainstalovaná v systému uživatele.

Existují dva primární způsoby přístupu k souborům a složkám v instalačním adresáři vaší aplikace:

  1. Můžete načíst StorageFolder, který představuje instalační adresář vaší aplikace, a to například takto:

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

    K souborům a složkám v adresáři pak můžete přistupovat pomocí metod StorageFolder . V tomto příkladu je tento StorageFolder uložen v installDirectory proměnné. Další informace o práci s balíčkem aplikace a instalaci adresáře najdete v ukázce informací o balíčku aplikace na GitHubu.

  2. Soubor můžete načíst přímo z instalačního adresáře aplikace pomocí identifikátoru URI aplikace, například takto:

    using Windows.Storage;            
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///file.txt"));
    
    Windows.Storage.StorageFile.getFileFromApplicationUriAsync("ms-appx:///file.txt").done(
        function(file) {
            // Process file
        }
    );
    
    Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
    {
        Windows::Storage::StorageFile file{
            co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{L"ms-appx:///file.txt"})
        };
        // Process file
    }
    
    auto getFileTask = create_task(StorageFile::GetFileFromApplicationUriAsync(ref new Uri("ms-appx:///file.txt")));
    getFileTask.then([](StorageFile^ file) 
    {
        // Process file
    });
    

    Po dokončení GetFileFromApplicationUriAsync se vrátí StorageFile, který představuje soubor file.txt v instalačním adresáři aplikace (file v příkladu).

    Předpona ms-appx:///v identifikátoru URI odkazuje na instalační adresář aplikace. Další informace o používání URI aplikací najdete v Jak používat URI k odkazování na obsah.

Kromě toho a na rozdíl od jiných umístění můžete přistupovat k souborům v instalačním adresáři vaší aplikace pomocí některých prostředků Win32 a COM pro aplikace pro Universal Windows Platform (UWP) a také některých funkcí standardní knihovny jazyka C/C++ z Microsoft Visual Studio.

Instalační adresář aplikace je umístění jen pro čtení. Přístup k instalačnímu adresáři nemůžete získat prostřednictvím nástroje pro výběr souborů.

Přístup k umístěním dat aplikací

Složky, do kterých může aplikace ukládat data. Tyto složky (místní, roaming a dočasné) se vytvoří při instalaci vaší aplikace.

Existují dva primární způsoby přístupu k souborům a složkám z umístění dat vaší aplikace:

  1. Pomocí vlastností ApplicationData načtěte složku dat aplikace.

    Můžete například použít ApplicationData.LocalFolder k načtení StorageFolder, která představuje místní složku vaší aplikace, například takto:

    using Windows.Storage;
    StorageFolder localFolder = ApplicationData.Current.LocalFolder;
    
    var localFolder = Windows.Storage.ApplicationData.current.localFolder;
    
    Windows::Storage::StorageFolder storageFolder{
        Windows::Storage::ApplicationData::Current().LocalFolder()
    };
    
    using namespace Windows::Storage;
    StorageFolder^ storageFolder = ApplicationData::Current->LocalFolder;
    

    Pokud chcete získat přístup k roamingové nebo dočasné složce aplikace, použijte místo toho vlastnost RoamingFolder nebo TemporaryFolder.

    Po načtení StorageFolder , který představuje umístění dat aplikace, můžete přistupovat k souborům a složkám v daném umístění pomocí metod StorageFolder . V tomto příkladu jsou tyto objekty StorageFolder uloženy v localFolder proměnné. Další informace o používání umístění dat aplikací najdete v pokynech na stránce třídy ApplicationData a stažením ukázky dat aplikace z GitHubu.

  2. Soubor můžete načíst přímo z místní složky aplikace pomocí identifikátoru URI aplikace, například takto:

    using Windows.Storage;
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/file.txt"));
    
    Windows.Storage.StorageFile.getFileFromApplicationUriAsync("ms-appdata:///local/file.txt").done(
        function(file) {
            // Process file
        }
    );
    
    Windows::Storage::StorageFile file{
        co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{ L"ms-appdata:///local/file.txt" })
    };
    // Process file
    
    using Windows::Storage;
    auto getFileTask = create_task(StorageFile::GetFileFromApplicationUriAsync(ref new Uri("ms-appdata:///local/file.txt")));
    getFileTask.then([](StorageFile^ file) 
    {
        // Process file
    });
    

    Když GetFileFromApplicationUriAsync dokončí, vrátí StorageFile, který představuje soubor v místní složce aplikace ( v příkladu).

    Předpona "ms-appdata:///local/" v identifikátoru URI odkazuje na místní složku aplikace. Pokud chcete získat přístup k souborům v roamingu nebo dočasných složkách aplikace, použijte místo toho příkaz ms-appdata:///roaming/nebo ms-appdata:///temporary/. Další informace o používání identifikátorů URI aplikací najdete v tématu Jak načíst prostředky souborů.

Kromě toho, na rozdíl od jiných umístění, můžete také přistupovat k souborům v umístěních dat vaší aplikace pomocí některých funkcí Win32 a COM pro UWP aplikace a některých funkcí standardní knihovny C/C++ ze sady Visual Studio.

Prostřednictvím nástroje pro výběr souborů nemůžete získat přístup k místním, roamingovým nebo dočasným složkám.

Přístup k vyměnitelným zařízením

Kromě toho může vaše aplikace ve výchozím nastavení přistupovat k některým souborům na připojených zařízeních. Toto je možnost, pokud vaše aplikace používá rozšíření Automatické přehrávání k automatickému spuštění, když uživatelé připojí zařízení, jako je fotoaparát nebo usb flash disk, k systému. Soubory, ke kterým má vaše aplikace přístup, jsou omezené na konkrétní typy souborů, které jsou zadané prostřednictvím deklarací přidružení typů souborů v manifestu aplikace.

Samozřejmě můžete také získat přístup k souborům a složkám na vyměnitelném zařízení voláním nástroje pro výběr souborů (pomocí FileOpenPickeru a FolderPickeru) a umožnit uživateli vybrat soubory a složky pro přístup k vaší aplikaci. Naučte se používat výběr souborů v a otevírat soubory a složky pomocí výběru.

Poznámka:

Další informace o přístupu k kartě SD nebo jiným vyměnitelným zařízením najdete v tématu Přístup k kartě SD.

Složka Stažené soubory uživatele

Složka, do které se stahované soubory ukládají ve výchozím nastavení.

Ve výchozím nastavení může vaše aplikace přistupovat jenom k souborům a složkám ve složce Stažené soubory uživatele, kterou vaše aplikace vytvořila. Přístup k souborům a složkám ve složce Stažené soubory uživatele ale můžete získat voláním nástroje pro výběr souborů (FileOpenPicker nebo FolderPicker), aby uživatelé mohli procházet a vybírat soubory nebo složky, ke kterým má vaše aplikace přístup.

  • Soubor můžete vytvořit ve složce Stažené soubory uživatele takto:

    using Windows.Storage;
    StorageFile newFile = await DownloadsFolder.CreateFileAsync("file.txt");
    
    Windows.Storage.DownloadsFolder.createFileAsync("file.txt").done(
        function(newFile) {
            // Process file
        }
    );
    
    Windows::Storage::StorageFile newFile{
        co_await Windows::Storage::DownloadsFolder::CreateFileAsync(L"file.txt")
    };
    // Process file
    
    using Windows::Storage;
    auto createFileTask = create_task(DownloadsFolder::CreateFileAsync(L"file.txt"));
    createFileTask.then([](StorageFile^ newFile)
    {
        // Process file
    });
    

    DownloadsFolder. CreateFileAsync je přetížen, takže můžete určit, co má systém dělat, pokud již existuje existující soubor ve složce Stažené soubory se stejným názvem. Po dokončení těchto metod vrátí StorageFile , který představuje soubor, který byl vytvořen. Tento soubor je v příkladu nazýván newFile.

  • Podsložku můžete vytvořit ve složce Stažené soubory uživatele takto:

    using Windows.Storage;
    StorageFolder newFolder = await DownloadsFolder.CreateFolderAsync("New Folder");
    
    Windows.Storage.DownloadsFolder.createFolderAsync("New Folder").done(
        function(newFolder) {
            // Process folder
        }
    );
    
    Windows::Storage::StorageFolder newFolder{
        co_await Windows::Storage::DownloadsFolder::CreateFolderAsync(L"New Folder")
    };
    // Process folder
    
    using Windows::Storage;
    auto createFolderTask = create_task(DownloadsFolder::CreateFolderAsync(L"New Folder"));
    createFolderTask.then([](StorageFolder^ newFolder)
    {
        // Process folder
    });
    

    DownloadsFolder. CreateFolderAsync je přetížen, takže můžete určit, co má systém dělat, pokud už existuje existující podsložka ve složce Stažené soubory se stejným názvem. Po dokončení těchto metod vrátí StorageFolder , který představuje podsložku, která byla vytvořena. Tento soubor je v příkladu nazýván newFolder.

Přístup k dalším umístěním

Kromě výchozích umístění může aplikace přistupovat k dalším souborům a složkám tím, že deklaruje schopnosti v manifestu aplikace nebo zavolá výběr souborů, aby uživatel mohl vybrat soubory a složky, ke kterým má aplikace přistupovat.

Aplikace, které deklarují Rozšíření AppExecutionAlias mají oprávnění systému souborů z adresáře, který se spouští v okně konzoly, a dolů.

Zachování přístupu k souborům a složkám

Když vaše aplikace načte soubor nebo složku pomocí nástroje pro výběr, aktivaci souboru, operaci přetažení atd. má přístup k danému souboru nebo složce, dokud se aplikace neukončí. Pokud chcete v budoucnu automaticky získat přístup k souboru nebo složce, můžete ho přidat do seznamu FutureAccessList , aby vaše aplikace v budoucnu k této položce snadno přistupovala. Seznam naposledy použitých souborů můžete také snadno spravovat pomocí seznamu MostRecentlyUsedList .

Možnosti pro přístup k jiným umístěním

Následující tabulka uvádí další umístění, ke kterým můžete přistupovat deklarováním jedné nebo více funkcí a použitím přidruženého rozhraní WINDOWS.Storage API.

Umístění Schopnost Windows.Storage API (rozhraní pro úložiště ve Windows)
Všechny soubory, ke kterým má uživatel přístup. Například: dokumenty, obrázky, fotky, soubory ke stažení, plocha, OneDrive atd. broadFileSystemAccess

Toto je omezená schopnost. Přístup lze nastavit v Nastavení>Ochrana osobních údajů>Systém souborů. Vzhledem k tomu, že uživatelé můžou oprávnění kdykoli udělit nebo odepřít v Nastavení, měli byste zajistit, aby vaše aplikace byla odolná vůči těmto změnám. Pokud zjistíte, že vaše aplikace nemá přístup, můžete požádat uživatele, aby změnil nastavení zadáním odkazu na přístup k systému souborů Windows a článek o ochraně osobních údajů . Všimněte si, že uživatel musí aplikaci zavřít, přepnout nastavení a restartovat aplikaci. Pokud přepnou nastavení, když je aplikace spuštěná, platforma pozastaví vaši aplikaci, abyste mohli uložit stav, a pak vynuceně ukončete aplikaci, aby se použilo nové nastavení. V aktualizaci z dubna 2018 je výchozí hodnota oprávnění zapnutá. V aktualizaci z října 2018 je výchozí hodnota vypnutá.

Pokud odešlete aplikaci do Storu, která tuto funkci deklaruje, budete muset zadat další popisy, proč vaše aplikace tuto funkci potřebuje a jak ji hodlá používat.

Tato funkce funguje pro rozhraní API v oboru názvů Windows.Storage . Podívejte se na oddíl Příklad na konci tohoto článku, kde je uveden příklad, jak povolit tuto funkci ve vaší aplikaci.

Poznámka: Tato funkce není na Xboxu podporovaná.
není k dispozici
Dokumenty knihovna dokumentů

Poznámka: Do manifestu aplikace musíte přidat přidružení typů souborů, které deklarují konkrétní typy souborů, ke kterým má aplikace přístup v tomto umístění.

Tuto funkci použijte, pokud vaše aplikace:
- Usnadňuje offline přístup ke konkrétnímu obsahu OneDrivu pro různé platformy pomocí platných adres URL nebo ID prostředků OneDrivu.
- Ukládá otevřené soubory na OneDrive uživatele automaticky v offline režimu.
Známé složky.DocumentsLibrary
Hudba hudební knihovna
Viz také Soubory a složky v knihovnách Hudba, Obrázky a Videa.
ZnáméSložky.HudebníKnihovna
Obrázky knihovnaObrázků
Viz také Soubory a složky v knihovnách Hudba, Obrázky a Videa.
ZnáméSložky.KnihovnaObrázků
Videa knihovnaVideí
Viz také Soubory a složky v knihovnách Hudba, Obrázky a Videa.
KnownFolders.Videoknihovna
Vyměnitelná zařízení vyměnitelné úložiště

Poznámka: Do manifestu aplikace musíte přidat přidružení typů souborů, které deklarují konkrétní typy souborů, ke kterým má aplikace přístup v tomto umístění.

Viz také Přístup ke kartě SD.
KnownFolders.VyměnitelnáZařízení
Knihovny Homegroup Potřebujete alespoň jednu z následujících funkcí.
- hudebníKnihovna
- knihovna obrázků
- videaKnihovna
ZnáméSložky.DomácíSkupina
Zařízení serveru médií (DLNA) Potřebujete alespoň jednu z následujících funkcí.
- hudebníKnihovna
- knihovna obrázků
- videaKnihovna
KnownFolders.MediaServerDevices
Složky UNC (Universal Naming Convention) Potřebujete kombinaci následujících funkcí.

Funkce domácí a pracovní sítě:
- privateNetworkClientServer

A alespoň jedna funkce internetu a veřejných sítí:
- internetKlient
- internetClientServer

A pokud je to možné, funkce přihlašovacích údajů domény:
- podnikové ověřování

Poznámka: Do manifestu aplikace musíte přidat přidružení typů souborů, které deklarují konkrétní typy souborů, ke kterým má aplikace přístup v tomto umístění.
Načtení složky pomocí:
StorageFolder.GetFolderFromPathAsync

Načtení souboru pomocí:
StorageFile.GetFileFromPathAsync

Příklad

Tento příklad přidá omezenou schopnost broadFileSystemAccess. Kromě určení schopnosti musí být přidán jmenný prostor rescap a také do IgnorableNamespaces.

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

Poznámka:

Úplný seznam funkcí aplikace najdete v tématu Deklarace funkcí aplikace.