Windows 10通用应用程序文件/目录访问

Windows 10通用应用程序文件/目录访问

我正在开发一个从文件系统上的可配置位置读取jpeg和pdf文件的应用程序。目前有一个在WPF中实现的运行版本,现在我正在尝试迁移到新的Windows Universal应用程序。

以下代码适用于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。重新启动程序后,也可以使用令牌访问该条目。

我还可以向您推荐UX Guidlines和这个Github示例

非常感谢你!


白衣非少年
浏览 722回答 3
3回答

慕桂英4014372

接受的答案已不再完整。现在可以broadFileSystemAccess在app清单中声明任意读取文件系统。“ 文件访问权限”页面包含详细信息。请注意,用户仍然可以通过设置应用撤消此权限。

杨魅力

这是一种受限制的能力。可在“设置”>“隐私”>“文件系统”中配置访问。并启用您的应用程序的访问权限 由于用户可以随时在“设置”中授予或拒绝权限,因此应确保您的应用能够适应这些更改。如果您发现您的应用程序无权访问,您可以选择通过提供指向Windows 10文件系统访问和隐私文章的链接来提示用户更改设置。请注意,用户必须关闭应用,切换设置,然后重新启动应用。如果他们在应用程序运行时切换设置,平台将暂停您的应用程序,以便您可以保存状态,然后强制终止应用程序以应用新设置。在2018年4月更新中,权限的默认值为“开”。在2018年10月更新中,默认为关闭。
打开App,查看更多内容
随时随地看视频慕课网APP