Fragensteller
Wie kann eine UWP feststellen. dass die Verbindung zu einem StorageFolder besteht

Frage
-
Liebe Gemeinde,
meine UWP verwendet zwei Arbeitsbereiche, einen öffentlichen und einen privaten. Der öffentliche Arbeitsbereich ist dafür zuständig, dass mehrere Anwender meiner App ihre Arbeitsergebnisse speichern können, die dann analysiert werden können. Der private Arbeitsbereich dient dazu, dass jeder Anwender frei bewegen und ohne Verbindung zum öffentlichen Arbeitsbereich Arbeitsergebnisse erfassen kann.
Meine App stellt fest, welcher der Arbeitsbereiche verfügbar ist ( ein Arbeitsbereich ist ein StorageFolder ), also die Verbindung zu diesem aufrecht ist. Dafür muss meine App aber die Möglichkeit haben dies Feststellung auch machen zu können. Die Erstverbindung zu einem Arbeitsbereich wird durch den FolderPicker hergestellt ( Ergebnis z.B. _folderWSP für den öffentlichen Arbeitsbereich ). Die Informationen zu diesem damit erfassten StorageFolder werden in der FutureAccessList gespeichert, der sich ergebende Token im ApplicationDataContainer:
StorageItemAccessList _lAccess = StorageApplicationPermissions.FutureAccessList;
ApplicationDataContainer _localSettings = ApplicationData.Current.LocalSettings;
_localSetting.Values [ "publicWSP" ] = _lAccess.Add ( _folderWSP );
Beim Neustart meiner App wird überprüft ob die Verbindung zum öffentlichen Arbeitsbereich besteht:
if ( _localSettings.Values [ "publicWSP" ] != null
&& await _lAccess.GetFolderAsync ( ( string ) _localSettings.Values [ "publicWSP" ] ) != null )
hierher komme ich, wenn xder _foldertWSP existiert
else
hierher sollte ich kommen, wenn der _folderWSP nicht existiert
Tatsache ist aber, dass meine UWP abstürzt, wenn _folderWSP nicht existiert, meine Frage ist daher:
welches Resultat liefert await _lAccess.GetFolderAsync ( ( string ) _localSettings.Values [ "publicWSP" ] )
wenn die Informationen über _folderWSP zwar in der FutureAccessList vorhanden sind, der dazugehörige _publicWSP aber nicht, laut ChatGPT müsste das Ergebnis null sein ?
Da ich aber annehme, dass in der FutursAccessList die Information des Pfades des _publicWSP gespeichert ist und beim Abruf des _publicWSP aus der FutureAccessList implizit die Funktion StorageFolder.GetFolderFromPathAsync verwendet wird komme ich zu folgenden Schluss:
StorageFolder.GetFolderFromPathAsync müsste laut Beschreibung die Ausnahme FileNotFoundException liefern, wenn _
publicWSP nicht existiert. Ich habe folgendenTest bei bestehendem _folderWSP durchgeführt:
string sPath = _folderWsp.Path;
try
{
StorageFolder _folderWSP = await StorageFolder.GetFolderFromPathAsync ( sPath ):
}
catch ( FileNotFoundException )
{
return;
}
Ich habe einen Haltepunkt auf StorageFolder folderWSP = await ... gesetzt, an diesem Punkt steht der Path von _folderWSP in sPath. Vor dem Fortsetzen habe ich mit dem Windows Explorer den _folderWSP gelöscht. Nach der Fortsetzung müsste ich eigentlich zum return; kommen, das geschieht aber nicht, die UWP stürzt einfach ab.
Wie komme ich aus dieser Misere heraus und wie kann ich gewährleisten, dass meine UWP zwar feststellt, dass z.B. _folderWSP nicht existiert oder keine Verbindung dazu möglich ist und trotzdem ohne Absturz weiter läuft ?
Mit herzlichem Dank für Eure Hilfe im Voraus
Herbert Stejdir
Alle Antworten
-
Hallo Herbert,
Falls Deine App über die entsprechenden Berechtigungen verfügt, kannst Du die StorageFolder.GetFolderFromPathAsync-API verwenden. Der folgende Artikel stellt eine Aufgabe bereit, die das Vorhandensein eines StorageFolder überprüft, der einen bestimmten Ordner darstellt:
Check if folder pointed by StorageFolder still exist
Gruß,
Ivan Dragov
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Bearbeitet Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 11. Mai 2023 09:11
-
Problem gelöst !
wenn await StorageFolder.GetFolderFromPathAsync ( Path ) versucht auf einen nicht vorhandenen StorageFolder zuzugreifen, dann ist die Ausnahme nicht "FileNotFoundException" sondern "UnauthorizezedAccessException".
Danke für Eure Hilfe
Herbert Stejdir