日期:2014-05-18  浏览次数:21043 次

请问C#有没有办法使用7z对文件进行压缩?
GZIP的压缩比太低了,一个文本文件只能压缩到1/10或者1/20,而7z能压缩到1/100.

请问有没有办法通过.NET程序来进行7z的文件压缩呢,不调用7z.exe文件.

请问.NET本身有没有提供使用7z算法对文件压缩的功能?
如果没有的话,有没有第三方写好的类或者是组件呢?



------解决方案--------------------
7z本身就是开源的。去官网找他的SDK吧。
------解决方案--------------------
直接命令行调用7z就OK了
带上参数
------解决方案--------------------
1.ICSharpCode.SharpZipLib(網路搜尋下載)
2.Ionic.Zip(網路搜尋下載)
3.java.util.zip(安裝vj# or java)
4.或直接使用C:\Program Files\7-Zip\7z 或 C:\Program Files\WinRAR\WinRAR
1~3範例
String[] mystrfile = strfile.Split(new char[] { '.' });
try
{
if (this.RadioButton1.get_Checked() == true)
{
String myfile = Directory.CreateDirectory(compressedfile).ToString();
ICSharpCode.SharpZipLib.Zip.ZipFile CsharpOpenZip = ICSharpCode.SharpZipLib.Zip.ZipFile.Create(myfile + "\\" + mystrfile[0] + ".zip");
CsharpOpenZip.BeginUpdate();
CsharpOpenZip.Add(strfile);
CsharpOpenZip.CommitUpdate();
CsharpOpenZip.Close();
}
else if (this.RadioButton2.get_Checked() == true)
{
String myfile = Directory.CreateDirectory(compressedfile).ToString();
Ionic.Zip.ZipFile IonicOpenZip = new Ionic.Zip.ZipFile(myfile + "\\" + mystrfile[0] + ".zip");
IonicOpenZip.AddFile(strfile);
IonicOpenZip.Save();
}
else if (this.RadioButton3.get_Checked() == true)
{
String myfile = Directory.CreateDirectory(compressedfile).ToString();
FileOutputStream javazipfile = new FileOutputStream(myfile + "\\" + mystrfile[0] + ".zip");
java.util.zip.ZipOutputStream javazipfiles = new java.util.zip.ZipOutputStream(javazipfile);
FileInputStream filipstrm = null;
String strfilname = strfile;
filipstrm = new java.io.FileInputStream(strfilname);
java.util.zip.ZipEntry ze = new java.util.zip.ZipEntry(Path.GetFileName(strfilname));
javazipfiles.putNextEntry(ze);
byte[] buffer = new byte[1025];
int len = 0;
while ((len = filipstrm.read(buffer)) >= 0) {
javazipfiles.write(buffer, 0, len);
}
javazipfiles.closeEntry();
filipstrm.close();
javazipfiles.close();
javazipfile.close();
}
MessageBox.Show("完成"); 
}
catch (Exception e)
{
MessageBox.Show("檔案壓縮錯誤" + System.Convert.ToString(e));
}