【发布时间】:2020-05-07 23:11:29
【问题描述】:
我正在开发一个应用程序,它从文件系统上的可配置位置读取 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();
问题是:它不工作,但我得到一个例外:
TextManager.Universal.DataAccess.dll 中出现“System.UnauthorizedAccessException”类型的异常,但未在用户代码中处理 附加信息:访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))
我知道您必须在清单中配置一些权限,但我找不到适合文件系统 IO 操作的权限...
是否有人也有这样的问题/可能的解决方案?
解决方案: 从@Rico Suter 给我的解决方案中,我选择了 FutureAccessList 和 FolderPicker。也可以在程序重启后使用Token访问入口。
我还可以向您推荐UX Guidlines 和这个Github sample。
非常感谢!
【问题讨论】:
-
为什么要从应用存储之外的目录中读取?沙盒的存在是有原因的。
-
因为我想要一种简单的方法来更改文件。所以这意味着,没有办法因为沙盒?
标签: c# wpf win-universal-app