Berechtigungen für den Dateizugriff

UWP-Apps (Universelle Windows Plattform) können standardmäßig auf bestimmte Dateisystemspeicherorte zugreifen. Apps können darüber hinaus mithilfe der Dateiauswahl oder über die Deklaration von Funktionen auf weitere Speicherorte zugreifen.

Speicherorte, auf die UWP-Apps zugreifen können

Bei Erstellung einer neuen App können Sie standardmäßig auf folgende Dateisystemspeicherorte zugreifen:

Installationsverzeichnis der Anwendung

Der Ordner, in dem Ihre App im System des Benutzers installiert ist.

Es gibt im Wesentlichen zwei Möglichkeiten für den Zugriff auf Dateien und Ordner im Installationsverzeichnis Ihrer App:

  1. Sie können auf folgende Weise einen StorageFolder aufrufen, der das Installationsverzeichnis Ihrer App darstellt:

    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;
    

    Sie können anschließend mithilfe von StorageFolder-Methoden auf Dateien und Ordner im Verzeichnis zugreifen. Im Beispiel wird dieser StorageFolder in der installDirectory-Variablen gespeichert. Im Informationsbeispiel zum App-Paket auf GitHub erfahren Sie mehr über die Arbeit mit Ihrem App-Paket und dem Installationsverzeichnis.

  2. Sie können eine Datei direkt aus dem Installationsverzeichnis Ihrer Anwendung mithilfe der Anwendungs-URI wie folgt aufrufen:

    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
    });
    

    Nach vollständiger Ausführung von GetFileFromApplicationUriAsync wird ein StorageFile zurückgegeben, das die Datei file.txt im Installationsverzeichnis der App darstellt (file im Beispiel).

    Das Präfix „ms-appx:///“ in der URI bezieht sich auf das Installationsverzeichnis der Anwendung. Weitere Informationen zur Verwendung von App-URIs finden Sie unter Verwenden von URIs zum Verweisen auf Inhalte.

Darüber hinaus können Sie im Gegensatz zu anderen Speicherorten auf das Installationsverzeichnis Ihrer App auch direkt mit Win32 und COM für UWP-Apps (Universelle Windows-Plattform) und einigen Funktionen der C/C++-Standardbibliothek in Microsoft Visual Studio zugreifen.

Das Installationsverzeichnis der Anwendung ist ein schreibgeschützter Speicherort. Sie können über die Dateiauswahl nicht auf das Installationsverzeichnis zugreifen.

Zugreifen auf Speicherorte von Anwendungsdaten

Die Ordner, in denen Ihre App Daten speichern kann. Diese Ordner (lokal, servergespeichert und temporär) werden nach Installation Ihrer Anwendung erstellt.

Es gibt im Wesentlichen zwei Möglichkeiten, auf Dateien und Ordner in den Dateispeicherorten Ihrer App zuzugreifen:

  1. Verwenden Sie die ApplicationData-Eigenschaften, um einen Dateiordner abzurufen.

    Sie können zum Beispiel ApplicationData.LocalFolder verwenden, um einen StorageFolder abzurufen, der den lokalen Ordner Ihrer Anwendung wie folgt darstellt:

    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;
    

    Wenn Sie auf den servergespeicherten oder temporären Ordner Ihrer Anwendung zugreifen möchten, verwenden Sie stattdessen die RoamingFolder- oder TemporaryFolder-Eigenschaft.

    Nach dem Aufrufen des StorageFolder, der den Dateispeicherort der Anwendung darstellt, können Sie auf Dateien und Ordner im Verzeichnis mithilfe der StorageFolder-Methode zugreifen. Im Beispiel werden diese StorageFolder-Objekte in der localFolder-Variablen gespeichert. Weitere Informationen zum Verwenden der Speicherorte von App-Daten finden Sie auf der Seite ApplicationData-Klasse. Sie können auch das Beispiel für Anwendungsdaten von GitHub herunterladen.

  2. Sie können eine Datei direkt aus dem lokalen Ordner Ihrer App mithilfe einer App-URI wie folgt aufrufen:

    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
    });
    

    Nach vollständiger Ausführung von GetFileFromApplicationUriAsync wird ein StorageFile zurückgegeben, das die Datei file.txt im lokalen Ordner der App darstellt (file im Beispiel).

    Das Präfix „ms-appdata:///local/“ in der URI bezieht sich auf den lokalen Ordner der Anwendung. Für den Zugriff auf Dateien in servergespeicherten oder temporären Ordnern verwenden Sie „ms-appdata:///roaming/“ oder „ms-appdata:///temporary/“. Weitere Informationen zur Verwendung von Anwendungs-URIs finden Sie in So wird's gemacht: Laden von Dateiressourcen.

Darüber hinaus können Sie, im Gegensatz zu anderen Speicherorten, auf Dateien in den App-Datenspeicherorten auch mit Win32 und COM für UWP-Apps (Universelle Windows-Plattform) und einigen Funktionen der C/C++-Standardbibliothek in Microsoft Visual Studio zugreifen.

Sie können über die Dateiauswahl nicht auf lokale, servergespeicherte oder temporäre Ordner zugreifen.

Zugreifen auf Wechselmedien

Darüber hinaus kann Ihre App standardmäßig auf einige der Dateien auf verbundenen Geräten zugreifen. Diese Möglichkeit besteht, wenn Ihre App die Erweiterung für die automatische Wiedergabe verwendet, die automatisch gestartet wird, sobald Benutzer ein Gerät, wie eine Kamera oder einen USB-Speicherstick, an Ihr System anschließen. Die Dateien, auf welche Ihre App zugreifen kann, sind auf bestimmte Dateitypen begrenzt, die über Deklarationen von Dateitypzuordnungen in Ihrem App-Manifest festgelegt sind.

Sie können natürlich auch auf Dateien und Ordner auf einem Wechselmedium mithilfe der Dateiauswahl zugreifen (unter Verwendung von FileOpenPicker und FolderPicker) und den Benutzer die Dateien und Ordner auswählen lassen, auf welche Ihre App Zugriff haben soll. Weitere Informationen zur Verwendung der Dateiauswahl finden Sie unter Öffnen von Dateien und Ordnern mit einer Auswahl.

Hinweis

Weitere Informationen zum Zugriff auf eine SD-Karte oder andere Wechselgeräte finden Sie unter Zugreifen auf die SD-Karte.

Ordner „Downloads“ des Benutzers

Der Ordner, in dem heruntergeladene Dateien standardmäßig gespeichert werden.

Standardmäßig kann Ihre Anwendung nur auf Dateien und Ordner im Ordner "Downloads" des Benutzers zugreifen, die von Ihrer App erstellt wurden. Sie können jedoch durch Aufrufen der Dateiauswahl auf weitere Dateien und Ordner im Downloadordner des Benutzers zugreifen (FileOpenPicker oder FolderPicker), sodass Benutzer zu Dateien oder Ordner navigieren und diese auswählen können und Ihre Anwendung Zugriff auf diese erhält.

  • Sie können im Downloadordner des Benutzers eine Datei wie folgt erstellen:

    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 ist überladen, sodass Sie festlegen können, was das System im Falle einer bereits vorhandenen gleichnamigen Datei im Ordner „Downloads“ des Benutzers tun sollte. Nach vollständiger Ausführung dieser Methoden wird ein StorageFile zurückgegeben, das die erstellte Datei darstellt. Diese Datei wird im Beispiel newFile genannt.

  • Sie können im Downloadordner des Benutzers wie folgt einen Unterordner erstellen:

    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 ist überladen, sodass Sie festlegen können, was das System im Falle eines bereits vorhandenen gleichnamigen Unterordners im Ordner „Downloads“ des Benutzers tun sollte. Nach vollständiger Ausführung dieser Methoden wird ein StorageFolder zurückgegeben, der den erstellten Unterordner darstellt. Diese Datei wird im Beispiel newFolder genannt.

Zugriff auf zusätzliche Speicherorte

Zusätzlich zu den Standardspeicherorten kann eine App durch das Deklarieren von Funktionen im App-Manifest oder durch Aufrufen der Dateiauswahl auf zusätzliche Dateien und Ordner zugreifen, um den Benutzer Dateien und Ordner auswählen zu lassen, auf die die App Zugriff haben soll.

Apps, die die Erweiterung AppExecutionAlias deklarieren, haben Dateisystemberechtigungen für das Verzeichnis, aus dem sie im Konsolenfenster gestartet werden, und darunter liegende Verzeichnisse.

Beibehalten des Zugriffs auf Dateien und Ordner

Wenn Ihre App eine Datei oder einen Ordner über eine Auswahl, eine Dateiaktivierung, einen Drag-and-Drop-Vorgang usw. abruft, hat sie nur Zugriff auf diese Datei oder diesen Ordner, bis die App beendet wird. Wenn Sie in Zukunft automatisch auf die Datei oder den Ordner zugreifen möchten, können Sie die Datei bzw. den Ordner zur FutureAccessList hinzufügen, damit Ihre App in Zukunft problemlos auf dieses Element zugreifen kann. Sie können auch die MostRecentlyUsedList verwenden, um auf einfache Weise eine Liste der zuletzt verwendeten Dateien zu verwalten.

Funktionen für den Zugriff auf andere Speicherorte

In der folgenden Tabelle sind weitere Speicherorte aufgeführt, auf die Sie durch Deklarieren von einer oder mehreren Funktionen und Verwenden der zugehörigen Windows.Storage-APIs zugreifen können.

Standort Funktion Windows.Storage-API
Alle Dateien, auf die der Benutzer Zugriff hat. Beispiel: Dokumente, Bilder, Fotos, Downloads, Desktop, OneDrive usw. broadFileSystemAccess

Dies ist eine eingeschränkte Funktion. Der Zugriff kann in Einstellungen>Datenschutz>Dateisystem konfiguriert werden. Weil Benutzer die Berechtigung in Einstellungen jederzeit gewähren oder verweigern können, sollten Sie sicherstellen, dass Ihre App auf diese Änderungen flexibel reagiert. Wenn Sie feststellen, dass Ihre App keinen Zugriff hat, können Sie den Benutzer auffordern, die Einstellung zu ändern, indem Sie ihm einen Link zum Artikel Dateisystemzugriff unter Windows 10 und Datenschutz bereitstellen. Beachten Sie, dass der Benutzer die App schließen, die Einstellung umschalten und dann die App neu starten muss. Wird die Einstellung umgeschaltet, während Ihre App ausgeführt wird, hält die Plattform die App an, damit Sie den Status speichern können, und erzwingt dann das Beenden der App, um die neue Einstellung anzuwenden. Im Update vom April 2018 lautet die Standardeinstellung für die Berechtigung „Ein“. Im Update vom Oktober 2018 lautet sie „Aus“.

Wenn Sie eine App an den Store übermitteln, die diese Funktion deklariert, müssen Sie zusätzliche Beschreibungen dazu bereitstellen, warum die App diese Funktion benötigt und wie sie sie verwenden wird.

Diese Funktion funktioniert für APIs im Namespace Windows.Storage. Im Abschnitt Beispiel am Ende dieses Artikels finden Sie ein Beispiel zum Aktivieren dieser Funktion in Ihrer App.

Hinweis: Diese Funktion wird auf Xbox nicht unterstützt.
Dokumente documentsLibrary

Hinweis: Sie müssen Ihrem App-Manifest Dateitypzuordnungen hinzufügen, die bestimmte Dateitypen deklarieren, auf die Ihre App an diesem Speicherort Zugriff hat.

Verwenden Sie diese Funktion, wenn Ihre App:
- Den plattformübergreifenden Offlinezugriff auf bestimmte OneDrive-Inhalte mit gültigen OneDrive-URLs oder Ressourcen-IDs ermöglicht.
– Geöffnete Dateien im Offlinezustand automatisch im OneDrive des Benutzers speichert.
KnownFolders.DocumentsLibrary
Musik musicLibrary
Weitere Informationen finden Sie unter Dateien und Ordner in den Musik-, Bild- und Videobibliotheken.
KnownFolders.MusicLibrary
Bilder picturesLibrary
Weitere Informationen finden Sie unter Dateien und Ordner in den Musik-, Bild- und Videobibliotheken.
KnownFolders.PicturesLibrary
Videos videosLibrary
Weitere Informationen finden Sie unter Dateien und Ordner in den Musik-, Bild- und Videobibliotheken.
KnownFolders.VideosLibrary
Wechselmedien removableStorage

Hinweis: Sie müssen Ihrem App-Manifest Dateitypzuordnungen hinzufügen, die bestimmte Dateitypen deklarieren, auf die Ihre App an diesem Speicherort Zugriff hat.

Weitere Informationen finden Sie unter Zugreifen auf die SD-Karte.
KnownFolders.RemovableDevices
Bibliotheken der Heimnetzgruppen Mindestens eine der folgenden Funktionen ist erforderlich.
- musicLibrary
- picturesLibrary
- videosLibrary
KnownFolders.HomeGroup
Medienservergeräte (DLNA) Mindestens eine der folgenden Funktionen ist erforderlich.
- musicLibrary
- picturesLibrary
- videosLibrary
KnownFolders.MediaServerDevices
Universal Naming Convention (UNC)-Ordner Eine Kombination der folgenden Funktionen ist erforderlich.

Die Funktion für Heim- oder Arbeitsplatznetzwerke:
- privateNetworkClientServer

Zudem mindestens eine Funktion für Internet und öffentliche Netzwerke:
- internetClient
- internetClientServer

Und gegebenenfalls die Funktion für Domänenanmeldeinformationen:
- enterpriseAuthentication

Hinweis: Sie müssen Ihrem App-Manifest Dateitypzuordnungen hinzufügen, die bestimmte Dateitypen deklarieren, auf die Ihre App an diesem Speicherort zugreifen kann.
Abrufen eines Ordners mithilfe von:
StorageFolder.GetFolderFromPathAsync

Abrufen einer Datei mithilfe von:
StorageFile.GetFileFromPathAsync

Beispiel

In diesem Beispiel wird die eingeschränkte broadFileSystemAccess-Funktion hinzugefügt. Zusätzlich zur Angabe der Funktion muss der Namespace rescap hinzugefügt werden und wird auch zu IgnorableNamespaces hinzugefügt.

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

Hinweis

Eine vollständige Liste der App-Funktionen finden Sie unter Deklarationen von App-Funktionen.