Tôi biết đây là một chủ đề cũ, nhưng tôi không thể tránh khỏi việc đăng một số thông tin hữu ích về điều này. Tôi thấy câu hỏi Zip xuất hiện rất nhiều và câu này trả lời gần như hầu hết các câu hỏi phổ biến.
Để giải quyết các vấn đề về khuôn khổ khi sử dụng 4.5 + ... Chúng là một lớp ZipStorer được tạo bởi jaime-olivares: https://github.com/jaime-olivares/zipstorer , anh ấy cũng đã thêm một ví dụ về cách sử dụng lớp này như tốt và cũng đã thêm một ví dụ về cách tìm kiếm một tên tệp cụ thể.
Và để tham khảo về cách sử dụng nó và lặp lại cho một phần mở rộng tệp nhất định, chẳng hạn như bạn có thể làm như sau:
#region
/// <summary>
/// Custom Method - Check if 'string' has '.png' or '.PNG' extension.
/// </summary>
static bool HasPNGExtension(string filename)
{
return Path.GetExtension(filename).Equals(".png", StringComparison.InvariantCultureIgnoreCase)
|| Path.GetExtension(filename).Equals(".PNG", StringComparison.InvariantCultureIgnoreCase);
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
//NOTE: I recommend you add path checking first here, added the below as example ONLY.
string ZIPfileLocationHere = @"C:\Users\Name\Desktop\test.zip";
string EXTRACTIONLocationHere = @"C:\Users\Name\Desktop";
//Opens existing zip file.
ZipStorer zip = ZipStorer.Open(ZIPfileLocationHere, FileAccess.Read);
//Read all directory contents.
List<ZipStorer.ZipFileEntry> dir = zip.ReadCentralDir();
foreach (ZipStorer.ZipFileEntry entry in dir)
{
try
{
//If the files in the zip are "*.png or *.PNG" extract them.
string path = Path.Combine(EXTRACTIONLocationHere, (entry.FilenameInZip));
if (HasPNGExtension(path))
{
//Extract the file.
zip.ExtractFile(entry, path);
}
}
catch (InvalidDataException)
{
MessageBox.Show("Error: The ZIP file is invalid or corrupted");
continue;
}
catch
{
MessageBox.Show("Error: An unknown error ocurred while processing the ZIP file.");
continue;
}
}
zip.Close();
}