2012-01-17 14 views
13

3つのファイルを1つのzipファイルにまとめて、ユーザー用にダウンロードする必要があります。私は1つのことを除いて私の要求を達成することができます:それはファイルをサブフォルダに圧縮します。例えばSharpZipLibを使用したZipファイルの作成

は、私のファイルは、以下のように配置されています

C:\TTCG\WebSites\Health\ABC.CSV 
C:\TTCG\WebSites\Health\XYZ.CSV 
C:\TTCG\WebSites\Health\123.CSV 

しかし、zipファイルには、パスとして「健康\ \ TTCG \ウェブサイト」を使用して、フォルダ内のファイルを圧縮します。添付ファイルをご覧ください。

Example

私は、パス内のフォルダを望んでいません。私はちょうど3つのファイルがzipファイルにフォルダなしでほしいと思う。それをどうすれば実現できますか?

私のコードのzipファイルを生成するためには、以下の通りである:

よくある質問をもとに
ZipFile z = ZipFile.Create(Server.MapPath("~" + @"\Accident.zip")); 

//initialize the file so that it can accept updates 
z.BeginUpdate(); 

//add the file to the zip file   
z.Add(Server.MapPath("~" + @"\ABC.csv")); 
z.Add(Server.MapPath("~" + @"\XYZ.csv")); 
z.Add(Server.MapPath("~" + @"\123.csv"));   

//commit the update once we are done 
z.CommitUpdate(); 
//close the file 
z.Close(); 

答えて

11

、手動でフォルダパスを取り除く必要があります:

どのように私はジップを作成することができますフォルダのないファイル? FAQがhere見出すことができるZipOutputStream

ZipEntry entry = new ZipEntry(Path.GetFileName(fullPath));

に添加する前に

はまたはZipEntry を作成するために使用されるファイル名のパスの一部を除去します。

これはライブラリの制限のようです。お役に立てれば!

1
z.Add(pathToFile, pathInZipFile); 
+1

これはコンパイルされません.Addメソッドはそのような2つの文字列をとらない –

3

あなたはFileSystemInfoでファイルを持っている場合は、あなたが使用することができます。z.Add(file.FullName, Path.GetFileName(file.FullName));

これはあなたのzipのルートディレクトリにファイルを追加します。

+0

これはコンパイルされません.Addメソッドはそのような2つの文字列を受け取りません。 –

+0

@MatthewLockそのメソッドは2つの文字列を取ります。 SharpZipLib v0.86.0.518 –

関連する問題