2016-02-04 98 views
0

我有一個業務場景,我應該允許將加密文件夾下載爲ZIP文件;這意味着文件夾及其子文件夾中的文件已被加密。當我執行文件的服務器端解密時,首先需要在臨時文件夾中重新創建相同的文件夾結構,並解密文件本身並將其保存到臨時文件夾的相應文件夾中。ASP.net MVC - IO.Compression庫不重新創建ZIP文件中的文件夾結構

這部分工作正常;臨時文件夾中的文件夾結構會被重新創建,但是當我嘗試使用System.IO.Compression庫創建臨時文件夾的ZIP文件時會出現問題。

當您打開ZIP文件時,只有該結構的第一個文件夾被創建爲一個文件夾,而其餘文件夾正在被創建爲無擴展名文件。

文件夾結構的解壓縮應用程序看到它

Folder structure as the unzipping application sees it

代碼片段:

//Creating temporary folder where the decrypted files will be extracted 
    var tempFolderPath = _directory.CreateTemporaryFolder(rootFolderPath); 
    var serverTempFolderPath = HttpContext.Current.Server.MapPath(tempFolderPath); 

    //Creating the folder structure 
    RecursiveFolderCreate(folders, tempFolderPath); 

    //Decrypting the files and recreating them in the corresponding folders 
    foreach (var file in files) 
    { 
     PrepareFile(file, folderPath, tempFolderPath); 
    } 

    //Creating the zip file 
    string zipFileName = string.Concat(folder.Name, ".zip"); 
    string zipFilePath = System.IO.Path.Combine(rootFolderPath, zipFileName); 
    string serverZipFilePath = HttpContext.Current.Server.MapPath(zipFilePath); 

    ZipFile.CreateFromDirectory(serverTempFolderPath, serverZipFilePath, CompressionLevel.Optimal, false); 
    byte[] zipFile = System.IO.File.ReadAllBytes(serverZipFilePath); 

回答

1

抱歉,這並不是一個評論,但我沒有足夠的聲譽來評論呢。

是否有可能引發異常並且未處理?

根據文檔(https://msdn.microsoft.com/en-us/library/hh485721(v=vs.110).aspx/),你在做什麼應該工作。但它有如下所示的額外警告:

如果目錄中的文件無法添加到歸檔中,則歸檔將保持不完整且無效,並且該方法會拋出IOException異常。

+0

謝謝你的回答,但不幸的是,我沒有在catch塊中得到任何東西。 –