亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 ZipFile.CreateFromDirectory 在這里拒絕訪問?

為什么 ZipFile.CreateFromDirectory 在這里拒絕訪問?

C#
陪伴而非守候 2022-01-09 14:57:16
我遇到了文件訪問問題。主要問題是我無法在文件夾選擇器獲取的文件夾中寫入 ZipFile 。雖然我一直在處理這個項目,但在遇到這個 ZipFile 問題之前,我做了很多與創建文件、刪除文件以及在該文件夾中創建文件夾相關的工作。這個問題似乎無關緊要。正如文件訪問文檔所說,我對用戶在使用文件夾選擇器時選擇的文件夾具有訪問權限。但我無法在該文件夾中創建此 ZipFile。以下是我的來源和例外。string zipfPath = folder.Path + @"\" + i.ToString() + ".zip";await folder.CreateFolderAsync("DADADAD");ZipFile.CreateFromDirectory(folder.Path + @"/DADADAD", zipfPath);為什么我無法訪問該文件夾ZipFile.Create(Path string)?使用 UWP 時是否有其他要求?ZipFile.Create也許我只是我的濫用?編輯System.UnauthorizedAccessException 之后出現異常消息 : “拒絕訪問路徑 'C:\Users\yohan\Desktop\? ?? (2)\1.zip'”。
查看完整描述

2 回答

?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

錯誤是正確的:您無權直接訪問該文件夾。目前,您最好的選擇可能是創建一個 ZipArchive,通過FolderQuery枚舉文件夾并將每個文件單獨流式傳輸到ZipEntry 中。

更多細節:

您的訪問權限是通過文件選擇器返回的 StorageFolder 授予的,并且需要通過該 StorageFolder 使用。

引用您鏈接的文件訪問權限文檔并為清楚起見添加了一些重點:

檢索表示應用數據位置的 StorageFolder 后,您可以使用 StorageFolder 方法訪問該位置中文件和文件夾。

由于 ZipFile 不使用 StorageFolder 方法,它無法到達目標文件夾。權限未附加到傳遞給 ZipFile 的路徑。

我在我的博客文章中更深入地討論了這個問題跳過路徑:堅持使用 StorageFile

正在進行通過直接文件系統調用來探測代理訪問的工作,但尚未完成。在當前版本的 Windows 10 中,您可以使用 IStorageFolderHandleAccessIStorageItemHandleAccessCreateFile2FromApp來獲取可用于創建 System.IO.File 對象的本機文件 HANDLE,但它不適用于 .Net 類,例如 ZipFile路徑并自行打開文件。


查看完整回答
反對 回復 2022-01-09
?
Helenr

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!");

                        }

                    }

                }



查看完整回答
反對 回復 2022-01-09
  • 2 回答
  • 0 關注
  • 840 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號