如果你在一個項目,可以使用完整的.NET工作,你可以嘗試使用 的ZipFile.CreateFromDirectory方法,如explained here:
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
string extractPath = @"c:\example\extract";
ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest, true);
ZipFile.ExtractToDirectory(zipPath, extractPath);
}
}
}
當然,如果你正在創建基於給定的目錄新的拉鍊,這隻會工作。
根據評論,以前的解決方案不保留目錄結構。如果需要,那麼下面的代碼可能會解決這個問題:
var InputDirectory = @"c:\example\start";
var OutputFilename = @"c:\example\result.zip";
using (Stream zipStream = new FileStream(Path.GetFullPath(OutputFilename), FileMode.Create, FileAccess.Write))
using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Create))
{
foreach(var filePath in System.IO.Directory.GetFiles(InputDirectory,"*.*",System.IO.SearchOption.AllDirectories))
{
var relativePath = filePath.Replace(InputDirectory,string.Empty);
using (Stream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
using (Stream fileStreamInZip = archive.CreateEntry(relativePath).Open())
fileStream.CopyTo(fileStreamInZip);
}
}
你的意思是一個zip文件夾或一個zip層次結構的文件夾結構嗎? – 2013-02-28 10:56:51
單個zip內的文件夾結構。 – 2013-02-28 11:01:16