나는 이것이 오래된 스레드라는 것을 알고 있지만 이것에 대한 유용한 정보를 게시하는 것을 피할 수는 없습니다. 나는 Zip 질문이 많이 나오는 것을 보았고 이것은 거의 대부분의 일반적인 질문에 대답합니다.
4.5+를 사용하는 프레임 워크 문제를 해결하기 위해 ... jaime-olivares에서 만든 ZipStorer 클래스입니다 : https://github.com/jaime-olivares/zipstorer , 그는 또한이 클래스를 다음과 같이 사용하는 방법에 대한 예제를 추가했습니다. 뿐만 아니라 특정 파일 이름을 검색하는 방법에 대한 예제도 추가했습니다.
그리고 이것을 사용하는 방법에 대한 참조를 위해 다음과 같이 특정 파일 확장자에 대해 반복 할 수 있습니다.
#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();
}