2013-09-23 102 views
0

這裏我試圖使用dotnetzip壓縮目錄的內容,並且我得到這個錯誤消息URI格式不受支持。
這是我用來做到這一點的代碼。壓縮文件不支持錯誤URI格式

string strDirectoryName="http://zyx.blob.core.windows.net/myfiles/mymusic" 
     using (ZipFile zip = new ZipFile()) 
      { 
       zip.AddDirectory(strDirectoryName); 
       zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G"); 
       zip.Save("zipFileToCreate"); 
      } 

我看着回答類似的問題here。我自己也是按照相同的URL格式,那麼爲什麼我收到此錯誤。請幫我解決這個錯誤

我修改上面的代碼隨後,zip文件正在創建但已損壞。 在我的blob容器'myfiles'中,我想通過讀取myMusic文件夾中的所有文件和文件夾,同時在zip文件內保留相同的文件夾結構來創建名爲「mymusic.zip」的zip文件。以下代碼創建zip文件,但zip文件被損壞。任何建議來解決這個問題?

string ofurl = @"http://myxyzstorage.blob.core.windows.net/myfiles/mymusic"; 
      string ofBlob = @"http://myxyz.blob.core.windows.net/myfiles"; 
      dBlob = new CloudBlob(blobClient.GetBlobReference(ofBlob)); 

      using (var zipFile = new ZipFile()) 
      { 
       byte[] fileBytes = dBlob.DownloadByteArray(); 
       using (var fileStream = new MemoryStream(fileBytes)) 
       { 
        fileStream.Seek(0, SeekOrigin.Begin); 
        zipFile.AddEntry(ofurl+".zip", fileBytes); 
       } 
       var sas = offlineContainer.GetSharedAccessSignature(new SharedAccessPolicy() 
       { 
        Permissions = SharedAccessPermissions.Write, 
       // SharedAccessExpiryTime = DateTime.UtcNow.AddSeconds(this.timeOutSeconds) 
       }); 

       using (var zipStream = new MemoryStream()) 
       { 
        zipFile.Save(zipStream); 
        zipStream.Seek(0, SeekOrigin.Begin); 
        var blobRef = ofContainer.GetBlobReference(ofurl); 
        blobRef.UploadFromStream(zipStream); 
       } 

      } 

這裏用我上面的代碼,爲什麼我的zip文件被損壞?

回答

0

我不熟悉dotnetzip,但我想我知道你的問題。

訪問項目到服務器時使用服務器路徑,而不是URI(Web地址)。操作系統不知道http://your.website實際上是其部分c:\\web\website\somedirectory

1

This site看起來像解決問題和解決方案。

Cheeso - DotNetZip can read from filesystems. It cannot read from http sources. An easy way to do what you want is to send a GET request to the HTTP resource, and then pass the ResponseStream to the call to AddFile().

他然後繼續代碼從試樣溶液

+0

提供的例子使用一個接受流ZipFile.AddEntry()方法,但在我的情況下,我需要來壓縮特定的目錄 – Steve