我正在开发一款应用程序,它可以从文件系统中的可配置位置读取jpeg和pdf文件。 目前已经实现了一个运行版本,使用的是WPF技术,现在我正在尝试迁移到新的Windows通用应用程序。
以下代码在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;
}
使用通用应用程序时,我遇到了一些问题:
Directory.Exists
不可用- 我如何读取位于我的应用程序存储之外的目录?
要从应用程序存储之外的其他目录中读取,请尝试以下操作:
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();
问题是:它无法工作,但我收到了一个异常:
类型为'System.UnauthorizedAccessException'的异常发生在TextManager.Universal.DataAccess.dll中,但未在用户代码中处理 附加信息:拒绝访问。(HRESULT 异常值为0x80070005(E_ACCESSDENIED))
我知道你必须在清单中配置一些权限,但我找不到适合文件系统 IO 操作的权限...
是否有人也遇到过这样的问题/可能的解决方案?
解决方案: 从@Rico Suter给我的解决方案中,我选择了FutureAccessList与FolderPicker相结合。在程序重新启动后,也可以使用Token访问该条目。
非常感谢!