web-dev-qa-db-ja.com

SharpZipLibを使用して、パスなしでZipにファイルを追加します

3つのファイルを1つのZipファイルに結合し、ユーザーがダウンロードできるようにする必要があります。私は1つのことを除いて私の要件を達成することができます:それはファイルをサブフォルダーに圧縮します。

たとえば、私のファイルは次のように配置されています。

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

ただし、Zipファイルでは、「TTCG\WebSites\Health \」をパスとして使用して、フォルダー内のファイルを圧縮します。添付ファイルをご覧ください。

Example

パスにフォルダを入れたくありません。フォルダなしでZipファイルに3つのファイルが欲しいだけです。どうすればそれを達成できますか?

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();
14
TTCG

FAQに基づいて、フォルダパスを手動で削除する必要があります。

フォルダなしでZipファイルを作成するにはどうすればよいですか?

ZipOutputStreamに追加する前に、ZipEntryの作成に使用したファイル名のパス部分を削除します

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

FAQは ここ で見つけることができます。

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

11
David Hoerster

FileSystemInfoにファイルがある場合は、次を使用できます。z.Add(file.FullName, Path.GetFileName(file.FullName));

これにより、Zipのルートディレクトリにファイルが追加されます。

3
user1818788
z.Add(pathToFile, pathInZipFile);
1
user2237201