Archivo de aplicación universal de Windows 10 / Acceso al directorio
Estoy desarrollando una aplicación que lee archivos jpeg y pdf desde una ubicación configurable en el sistema de archivos. Actualmente hay una versión en ejecución implementada en WPF y ahora estoy tratando de pasar a las nuevas aplicaciones de Windows Universal.
El siguiente código funciona bien con WPF:
public IList<string> GetFilesByNumber(string path, string number)
{
if (string.IsNullOrWhiteSpace(path))
throw new ArgumentNullException(nameof(path));
if (string.IsNullOrWhiteSpace(number))
throw new ArgumentNullException(nameof(number));
if (!Directory.Exists(path))
throw new DirectoryNotFoundException(path);
var files = Directory.GetFiles(path, "*" + number + "*",
SearchOption.AllDirectories);
if (files == null || files.Length == 0)
return null;
return files;
}
Con el uso de Universal Apps me encontré con algunos problemas:
Directory.Exists
no está disponible¿Cómo puedo leer desde directorios fuera del almacenamiento de mi aplicación?Para leer desde otro directorio fuera del almacenamiento de la aplicación, probé lo siguiente:
StorageFolder folder = StorageFolder.GetFolderFromPathAsync("D:\\texts\\");
var fileTypeFilter = new string[] { ".pdf", ".jpg" };
QueryOptions queryOptions = new QueryOptions(CommonFileQuery.OrderBySearchRank, fileTypeFilter);
queryOptions.UserSearchFilter = "142";
StorageFileQueryResult queryResult = folder.CreateFileQueryWithOptions(queryOptions);
IReadOnlyList<StorageFile> files = queryResult.GetFilesAsync().GetResults();
La cosa es: no está funcionando, pero tengo una excepción:
Se produjo una excepción del tipo 'System.UnauthorizedAccessException' en TextManager.Universal.DataAccess.dll pero no se manejó en el código de usuario Información adicional: Acceso denegado. (Excepción de HRESULT: 0x80070005 (E_ACCESSDENIED))
Sé que tiene que configurar algunos permisos en el manifiesto, pero no puedo encontrar uno adecuado para las operaciones de E / S del sistema de archivos ...
¿Alguien también tuvo tales problemas / una posible solución?
Solución: De las soluciones que me dio @Rico Suter, elegí FutureAccessList en combinación con FolderPicker. También es posible acceder a la entrada con el token después de reiniciar el programa.
También puedo recomendarte elLineamientos UX y estoMuestra de Github.
¡Muchas gracias!