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 關注
- 840 瀏覽
添加回答
舉報