#

UWP, NoGo: Dateizugriff erlauben, Ask_Allow_Access_to_File

 
In Universal Windows Apps benötigt man eine Erlaubnis zum Öffnen von Dateien auf dem Computer. Diese muss man sich über den FilePicker oder FolderPicker einholen.
Das heißt, wenn man eine Datei benötigt, dann muss erst einmal über einen Datei-Dialog die Datei erst ausgewählt werden.
 
Diese Vorgehensweise ist bei vielen Phone Apps in der Sandbox auch sinnvoll, aber es stellt zugleich ein k.o.-Kriterium dar für Anwendungen auf dem PC.
Man kann zum Beispiel kein Foto von irgendeinem Laufwerk oder freien Dateipfad öffnen.
Zugleich ist es nicht möglich speziell für diese Datei oder diesen Ordner zur Laufzeit die Erlaubnis einzuholen. Man kann also nicht sagen: Geben Sie mir die Erlaubnis das Verzeichnis ABC zu öffnen.
Man muss immer zuerst einen FilePicker öffnen, wobei man diesem nicht den Pfad vorgeben darf.
Man hat NICHT die Möglichkeit dem Datei-Dialog einen Standard-Pfad vorzuschlagen. Der User muss sich frei durch das Verzeichnis durchklicken, bis er den Pfad gefunden hat.
 
Betrifft: technisches K.O. Kriterium in Universal Windows Apps, No-Go Kriterium, Access-Denied

Wenn man auf eine Datei keinen Zugriff hat, dann kommt beim Versuch die Datei über die UWP App zu öffnen die Fehlermeldung:
Message      "Zugriff verweigert (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))"     string
 

 
 
Beispiel-Code der das Problem beschriebt:
Wenn der Zugriff verweigert wird, dann öffne FolderPicker, welcher allerdings keinen Pfad aufweist.


StorageFile storageFile=null;
try
{
storageFile = await StorageFile.GetFileFromPathAsync(sFilePath);
}
catch (Exception ex )
{
if (ex.HResult== -2147024891)
{
string sMessage = "Select the folder to give read file access in next dialog: " + Environment.NewLine + "Folder or Up: " + sFilePath ;
string sTitle = "File Reading Permission is necassary";
clsSys.show_Message(sMessage, sTitle);
 
//< open FolderPicker to get Read Permission >
FolderPicker picker = new FolderPicker();
picker.FileTypeFilter.Add("*");
picker.ViewMode = PickerViewMode.Thumbnail;
picker.SuggestedStartLocation = PickerLocationId.ComputerFolder ;
picker.CommitButtonText = "Allow Read";
StorageFolder objPicked_Folder = await picker.PickSingleFolderAsync();

//< Bilder laden >
if (objPicked_Folder != null)
{
string sPath = objPicked_Folder.Path;
//< Zugriff global speichern >
StorageApplicationPermissions.FutureAccessList.Add(objPicked_Folder, "metadata");
//< Zugriff global speichern >
}
//</ open FolderPicker to get Read Permission >
 
//Message "Zugriff verweigert (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))" string
 
}

 
 
 
Benötigt wird eine Methode wie:
 
ask_allow_access_to_file(path)
ask_allow_access_to_folder(path)
 
Mobile

.

123movies