2 回答

TA贡献1854条经验 获得超8个赞
错误是正确的:您无权直接访问该文件夹。目前,您最好的选择可能是创建一个 ZipArchive,通过FolderQuery枚举文件夹并将每个文件单独流式传输到ZipEntry 中。
更多细节:
您的访问权限是通过文件选择器返回的 StorageFolder 授予的,并且需要通过该 StorageFolder 使用。
引用您链接的文件访问权限文档并为清楚起见添加了一些重点:
检索表示应用数据位置的 StorageFolder 后,您可以使用 StorageFolder 方法访问该位置中的文件和文件夹。
由于 ZipFile 不使用 StorageFolder 方法,它无法到达目标文件夹。权限未附加到传递给 ZipFile 的路径。
我在我的博客文章中更深入地讨论了这个问题跳过路径:坚持使用 StorageFile
正在进行通过直接文件系统调用来探测代理访问的工作,但尚未完成。在当前版本的 Windows 10 中,您可以使用 IStorageFolderHandleAccess、IStorageItemHandleAccess或CreateFile2FromApp来获取可用于创建 System.IO.File 对象的本机文件 HANDLE,但它不适用于 .Net 类,例如 ZipFile路径并自行打开文件。

TA贡献1780条经验 获得超4个赞
我使用 StorageFile、Stream、ZipArchive、ZipArchiveEntry、Stream Writer 来实现。
下面是我在文件夹选择器()获取的文件夹中创建 zip 文件的简短源代码。
它工作得很好。Rob Caplan,感谢您非常清楚的解释。
StorageFile f = await folder.CreateFileAsync("test.zip");
using (Stream s = (await f.OpenStreamForWriteAsync()))
{
using (ZipArchive zz = new ZipArchive(s, ZipArchiveMode.Update))
{
ZipArchiveEntry read = zz.CreateEntry("scc.txt");
using (StreamWriter sw = new StreamWriter(read.Open()))
{
await sw.WriteLineAsync("StackOverFlow");
await sw.WriteLineAsync("Thanks!");
}
}
}
- 2 回答
- 0 关注
- 859 浏览
添加回答
举报