2012-05-17 77 views
9

Tôi có một thư mục "D:\folder" và trong thư mục này, tôi có 10 tệp mà tôi cần phải nén vào lưu trữ mới "D:\folder.zip".Cách nén tất cả các tệp trong thư mục

Hiện tại tôi đang sử dụng ICSharpCode.SharpZipLib nhưng đây không phải là yêu cầu bắt buộc, vì vậy các giải pháp khác có thể chấp nhận được.

Sự cố mà tôi đang gặp phải là khi tôi cố thực hiện phương thức FileStream fs = File.OpenRead(@"D:\folder") Tôi gặp lỗi do truy cập vào đường dẫn được chỉ định.

Tôi làm cách nào để nén các tệp này một cách đơn giản?

+0

Tìm kiếm nhanh trên google: http://www.codeproject.com/Articles/37887/C-Zip-Files-and-or-Folders - Có lẽ nó có thể giúp bạn. –

+0

Xem [cách đọc tất cả các tệp trong thư mục cụ thể] (http://stackoverflow.com/questions/5840443/how-to-read-all-files-inside-particular-folder). –

+3

có thể trùng lặp của [Thư mục zip trong C#] (http://stackoverflow.com/questions/905654/zip-folder-in-c-sharp) –

Trả lời

20

DotNetZip là dễ dàng hơn để sử dụng hơn SharpZipLib, ví dụ về nén tất cả các file trong thư mục:

using (ZipFile zip = new ZipFile()) 
    { 
    zip.AddDirectory(@"MyDocuments\ProjectX", "ProjectX"); 
    zip.Save(zipFileToCreate); 
    } 

Đây là một ví dụ từ trang này:

http://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples

+0

Đúng, đây là thư viện dễ sử dụng hơn SharpLib, +1 –

+0

cảm ơn! bạn có thể nói tôi cần lắp ráp cho ZipFile này không. Ionic.Zip - theo như tôi hiểu. chính xác? –

+0

là Ionic.Zip.dll –

13

Tôi cũng đồng ý với đề nghị của Antonio Bakula để sử dụng DotNetZip thay vì SharpZipLib.

.NET 4.5 bao gồm các lớp ZipArchiveZipFile mới để thao tác các tệp .zip. Với sự hỗ trợ này những gì bạn đang cố gắng làm là thực hiện bằng cách:

ZipFile.CreateFromDirectory(@"D:\Folder", @"Folder.zip"); 

Như một mặt lưu ý lý do bạn nhận được lỗi là bởi vì bạn đang cố gắng để mở một thư mục thay vì một tập tin. File.OpenRead được sử dụng để mở tệp để đọc, vì bạn cung cấp thư mục, bạn gặp lỗi. Nếu bạn muốn liệt kê các tệp hoặc thư mục bên trong một thư mục cụ thể, bạn có thể sử dụng Directory.EnumerateFiles hoặc Directory.EnumerateDirectories.

Các vấn đề liên quan