2016-07-22 8 views
2

まずは解決策を探してみたが、解凍する必要がない場所を見つけられず、フォルダを追加するもう一度ジッパーを押してください。私は第三者図書館を使用していません。私はsystem.io.compressionを使ってこれをやってみたいです。もしそうでなければ、最後の手段としてdotnetzipを使います。既存の.zipファイルにディレクトリを追加する

tl; dr。 すでに作成されたzipファイルに、ファイルが入ったディレクトリを追加できるようにします。これはsystem.io.compressionライブラリを使用して可能ですか?

EDITは:

 using (FileStream zipToOpen = new FileStream(zipfile, FileMode.Open)) 
     { 
      using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update)) 
        { 
        ZipArchiveEntry readmeEntry = archive.CreateEntry("testFolder/"); 
        } 
     } 

だから、このコードを使用して私の中にフォルダを作成することができていますが、それはそれで任意のファイルなしになります。私の質問は今私はzipの中のこのフォルダに私のソースフォルダからすべてのファイルを取得するためにこのコードを再度実行する必要がありますか良い方法がありますか?

+0

を、あなたはあなただけのフォルダを追加したいと言っており、それに任意のファイルを追加したり、そこにファイルを移動しませんか?または、ファイルを含むディレクトリを追加していますか? – stuartd

+0

申し訳ありませんが、明確にしていませんが、ファイルが入ったディレクトリを追加したいと思います。すぐに編集します – YMIFrozen

+0

[既存のzipアーカイブにファイルを追加するにはどうすればいいですか?](http://stackoverflow.com/questions/22339260/how-do-i-add-files-to-an-existing-zip -archive)あなたの質問に答えますか? – stuartd

答えて

3

@stuartdのおかげで、これを行う方法を見つけることができました。彼は私にこの答えをhttps://stackoverflow.com/a/22339337/3182972と指摘し、私はそのディレクトリのソースの場所からそれらの内部にファイルを含むディレクトリを作成する私のコードに実装する方法を見つけました。ここで

コードです:

using (FileStream zipToOpen = new FileStream("c:\MyDestination\test.zip", FileMode.Open)) 
     { 
     using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update)) 
      { 
      ZipArchiveEntry readmeEntry; 
      DirectoryInfo d = new DirectoryInfo(c:\MySourceFolder); 
      FileInfo[] Files = d.GetFiles("*"); 
      foreach (FileInfo file in Files) 
      { 
       readmeEntry = archive.CreateEntryFromFile("c:\MySourceFolder"+ "\\" + file.Name, "MySourceFolder" + "/" + file.Name); 
      } 
      } 
     } 

だから何私がしたことは、私のソースディレクトリに移動し、そこに私が先のフォルダにそれらを追加するforeachサイクルにあるファイルのすべてを経てましたZIPファイル。

また、このコードのソースディレクトリ名を取得することができます明確にするため

string sourcepath = "C:\MySourceFolder"; 
int ind = sourcepath.LastIndexOf("\\") + 1; 
string folderName = sourcepath.Substring(ind, folder.Length - ind); 
関連する問題