C\#에서 zip 압축 해제 도움말 류 에 대한 패키지 소스 다운로드
7150 단어 zip 압축 해제
파일 및 폴 더 압축.파일 압축 은 매우 간단 하 다.압축 할 파일 을 흐 르 는 방식 으로 메모리 에 읽 은 다음 압축 흐름 에 넣는다.됐 습 니 다.폴 더 가 좀 귀 찮 습 니 다.압축 할 폴 더 의 압축 을 풀 고 폴 더 파일 의 계층 구 조 를 유지 해 야 하기 때문이다.그래서 제 실현 방식 은 폴 더 에 있 는 파일 을 재 귀적 으로 옮 겨 다 니 는 것 입 니 다.상대 적 인 위 치 를 계산 하여 압축 흐름 에 넣다.
코드 는 다음 과 같 습 니 다
/// <summary>
///
/// </summary>
/// <param name="_depositPath"> C:\\windows\abc.zip</param>
/// <returns></returns>
public bool CompressionZip(string _depositPath)
{
bool result = true;
FileStream fs = null;
try
{
ZipOutputStream ComStream = new ZipOutputStream(File.Create(_depositPath));
ComStream.SetLevel(9); //
foreach (string path in AbsolutePaths)
{
//
if (Directory.Exists(path))
{
ZipFloder(path, ComStream, path);
}
else if (File.Exists(path))//
{
fs = File.OpenRead(path);
byte[] bts = new byte[fs.Length];
fs.Read(bts, 0, bts.Length);
ZipEntry ze = new ZipEntry(new FileInfo(path).Name);
ComStream.PutNextEntry(ze); //
ComStream.Write(bts, 0, bts.Length); //
}
}
ComStream.Finish(); //
ComStream.Close();
}
catch (Exception ex)
{
if (fs != null)
{
fs.Close();
}
errorMsg = ex.Message;
result = false;
}
return result;
}
//
private void ZipFloder(string _OfloderPath, ZipOutputStream zos, string _floderPath)
{
foreach (FileSystemInfo item in new DirectoryInfo(_floderPath).GetFileSystemInfos())
{
if (Directory.Exists(item.FullName))
{
ZipFloder(_OfloderPath, zos, item.FullName);
}
else if (File.Exists(item.FullName))//
{
DirectoryInfo ODir = new DirectoryInfo(_OfloderPath);
string fullName2 = new FileInfo(item.FullName).FullName;
string path = ODir.Name + fullName2.Substring(ODir.FullName.Length, fullName2.Length - ODir.FullName.Length);//
FileStream fs = File.OpenRead(fullName2);
byte[] bts = new byte[fs.Length];
fs.Read(bts, 0, bts.Length);
ZipEntry ze = new ZipEntry(path);
zos.PutNextEntry(ze); //
zos.Write(bts, 0, bts.Length); //
}
}
}
스트레스 해소 에 대하 여 스트레스 푸 는 게 훨씬 쉬 워.파일 압축 해제 파일 이 있 고 폴 더 가 옮 겨 다 니 며 압축 해제 파일 이 있 습 니 다.압축 을 푸 는 파일 에는 폴 더 와 의 차원 관계 가 포함 되 어 있 습 니 다.
/// <summary>
///
/// </summary>
/// <param name="_depositPath"> </param>
/// <param name="_floderPath"> </param>
/// <returns></returns>
public bool DeCompressionZip(string _depositPath, string _floderPath)
{
bool result = true;
FileStream fs=null;
try
{
ZipInputStream InpStream = new ZipInputStream(File.OpenRead(_depositPath));
ZipEntry ze = InpStream.GetNextEntry();//
Directory.CreateDirectory(_floderPath);//
while (ze != null)// ze null
{
if (ze.IsFile)// zipINputStream 。 \\
{
string[] strs=ze.Name.Split('\\');// '\\‘
if (strs.Length > 1)
{
//
for (int i = 0; i < strs.Length-1; i++)
{
string floderPath=_floderPath;
for (int j = 0; j < i; j++)
{
floderPath = floderPath + "\\" + strs[j];
}
floderPath=floderPath+"\\"+strs[i];
Directory.CreateDirectory(floderPath);
}
}
fs = new FileStream(_floderPath+"\\"+ze.Name, FileMode.OpenOrCreate, FileAccess.Write);//
//
while (true)
{
byte[] bts = new byte[1024];
int i= InpStream.Read(bts, 0, bts.Length);
if (i > 0)
{
fs.Write(bts, 0, i);
}
else
{
fs.Flush();
fs.Close();
break;
}
}
}
ze = InpStream.GetNextEntry();
}
}
catch (Exception ex)
{
if (fs != null)
{
fs.Close();
}
errorMsg = ex.Message;
result = false;
}
return result;
}
마지막 으로 총 결 을 한다.C\#고급 언어 로 서 강력 한 라 이브 러 리 와 제3자 가 제공 하 는 라 이브 러 리 입 니 다.많은 일 을 할 수 있다.그러나 제3자 라 이브 러 리 를 사용 하 는 성능 이 높 지 않다 는 단점 도 있다.나 는 몇 백 M 의 물건 을 압축 했다.cpu 는 순식간에 50%넘 게 달 렸 다.360 압축 과 zip 압축 성능 보다 훨씬 떨어진다.그래서 이런 것 도 압축 이 비교적 작은 것 에 적용 된다.전체 예 다운로드 주소