C# 7-Zip Executable
7-Zip can be used in C# programs. It provides excellent compression ratios. We embed the 7-Zip command-line executable in a C# program. We then invoke it with the Process class.
Compression results Standard .NET GZIP: 895,425 bytes (Uses GZipStream class)
7-Zip GZIP: 825,285 bytes
7-Zip GZIP Ultra: 819,631 bytes
New project

First, you need to create a new C# project, usually either Console or Windows Forms, although any will work. Here we will show a console application. Next, you need to download the executable.
Download:Go to the downloads page at 7-Zip.org and download the console application. The description is "7-Zip Command Line Version" and the filename is 7za457.zip. This is the file we will embed in our program. After you download, unzip it.
Add 7za.exe

Right-click on your project name in the Solution Explorer and select Add Existing Item. You need to change the drop-down icon on the dialog to "All Files (*.*)", which will show the 7za.exe executable.
Copy if newer. With Visual Studio, you must specify "Copy if newer" or "Copy always" to copy files such as executables to the output directory. Specify either of those options to copy the 7za.exe executable.
Add example text file. We need an example file to test 7-Zip with, so add a new text file to your console project. Make sure to specify "Copy if newer" for it too. This will be our source file.
Implementation

Here we add the code to control the 7-Zip executable. In the first part of the code, we specify the source file name and the target file name. The source file name is the name of the text file you added to the project. The target name is the location of the archive you want to create.
Note:If the archive is already there, you will have to delete it or tell 7-Zip to overwrite it.
Program that calls 7-Zip executable: C# using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics; class Program
{
static void Main()
{
string sourceName = "ExampleText.txt";
string targetName = "Example.gz"; // 1
// Initialize process information.
//
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = "7za.exe"; // 2
// Use 7-zip
// specify a=archive and -tgzip=gzip
// and then target file in quotes followed by source file in quotes
//
p.Arguments = "a -tgzip \"" + targetName + "\" \"" + sourceName + "\" -mx=9";
p.WindowStyle = ProcessWindowStyle.Hidden; // 3.
// Start process and wait for it to exit
//
Process x = Process.Start(p);
x.WaitForExit();
}
}

We use ProcessStartInfo and set the FileName to the name of the 7za.exe executable in the project. Pay close attention to how the quotes are escaped and used in the line where Arguments is set. In this example, I use GZip compression.
Next:We actually start the Process and execute it. Windows can cause problems here if you are not an administrator on your PC.
Verify results
Now we need to check if our project worked properly. Open the bin\Debug or bin\Release folder in your project's directory, and you should see the compressed file. Extract that file with 7-Zip in Windows, and it will have the same data.

Bugs. Here we look at possible problems with this tutorial. First make sure all the files are being copied and the Arguments syntax is correct. The quotes in the syntax are really important if you deal with more complicated paths. After that, you might have problems with Vista's UAC stuff.
Note:The first argument (a) in the command doesn't have a hyphen (-) before it.
Options

I won't go over every option, because 7-Zip itself provides an excellent reference. Go to the 7-Zip folder and double-click on the "7-zip.chm" file. That's a compiled HTML help file that you can browse for many options.
Specify compression levels:You want the smallest possible compressed files, but don't want to wait for hours. On the example, I use -mx=9, which sets the maximum for Zip and GZip. Experiment with this.
Specify archive type:You may need something different from GZip in your program. The ".7z" format probably has the best compression ratio. If you want to use HTTP compression, use GZip, but if you are archiving, then I suggest 7z. Specify the compression with these flags.
Is this worthwhile?

Yes, but only if you are trying to achieve excellent compression ratios. Otherwise, use GZipStream in your C# programs or just Windows' zip capabilities. If you have a website, use 7-Zip to compress static resources. Use GZip like I show in the code example, and with level 9 compression, your web pages will be 10% smaller than most GZip-compressed pages.
HTTP compression. For my web site's static pages, 7-Zip was a substantial improvement over standard compression methods. Look at how I reduced the size of my files 10% over standard GZip. You can see the results of these experiments at the top of this document.
Note:There is a thorough guide to using 7-Zip and 7za.exe on the console, which can help with many problems using 7-Zip on the console.
Summary

We invoked the 7-Zip executable from C# code. Sometimes it is best to go outside the .NET Framework when developing and use an open-source exe like 7-Zip. For me, 10% is a big improvement and 7-Zip is definitely worthwhile.
Review:Here I showed an effective way of embedding 7-Zip and improving compression ratios.
C# 7-Zip Executable的更多相关文章
- Can't use Subversion command line client: svn Probably the path to Subversion executable is wrong. Fix it.
		
1.最近使用SVN工具时,Checkout出项目到本地后后,然后将其导入到Intellij idea中开发,在提交svn代码的时候,出现这样的错误:Can't use Subversion comma ...
 - linux专题一之文件归档和压缩(tar、file、zip)
		
本文主要从以下几个方便来说明文件的归档和压缩,同时比较几种不同压缩方法的压缩比率及特点. 文件归档命令tar,tar.gz源码包的安装管理 创建tar包-解压-查询tar包内容 zip命令的用法 为 ...
 - Android系统Recovery工作原理之使用update.zip升级过程分析(一)
		
通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.我们先从update.zip包的制作开始,然后是Android系统的启动 ...
 - Chromedriver executable needs to be in path 解决办法
		
执行webdriver.Chrome()时报错:Chromedriver executable needs to be in path. 原因可能是为有安装Chromedriver 可能是Chrome ...
 - Android studio 安装已经下载好的gradle.zip文件【ubuntu 14.04 LTS环境】
		
一 下载 gradle-3.3-all.zip 包 http://download.csdn.net/detail/t6546545/9732412 http://www.fxxz.com/soft/ ...
 - Python解压ZIP、RAR等常用压缩格式的方法
		
解压大杀器 首先祭出可以应对多种压缩包格式的python库:patool.如果平时只用基本的解压.打包等操作,也不想详细了解各种压缩格式对应的python库,patool应该是个不错的选择. pato ...
 - Spring Boot Executable jar/war 原理
		
spring boot executable jar/war spring boot里其实不仅可以直接以 java -jar demo.jar的方式启动,还可以把jar/war变为一个可以执行的脚本来 ...
 - Android系统Recovery工作原理之使用update.zip升级过程分析(一)---update.zip包的制作【转】
		
本文转载自:http://blog.csdn.net/mu0206mu/article/details/7399822 这篇及以后的篇幅将通过分析update.zip包在具体Android系统升级的过 ...
 - python版本下载时时,官方目录web-based与executable和embeddable 的区别
		
背景:安装python时不知道选择哪个版本以及他们之间的意思. 1.X86和X86-64的区别:系統是32 bit 的版本还是 64bit 的 2.web-based ,executable , em ...
 
随机推荐
- 用于浏览器本地存储的js插件 - jStorage
			
简介 jStorage是一个跨浏览器的将key-value类型的数据存储到浏览器本地存储的js插件——jStorage支持所有主流浏览器,PC机(甚至包括是IE6)和移动终端均可用.此外,jStora ...
 - C#后台获取ajax传来的xml格式数据值
			
前台: var xml = "<root>"; if(Name!=null) { xml += "<name>"+Name +" ...
 - 【leetcode】22. Generate Parentheses
			
题目描述: Given n pairs of parentheses, write a function to generate all combinations of well-formed par ...
 - EOJ 3246 实验室传染病
			
线段树,暴力. 先处理出每个点直接能感染到的最左边的和最右边的. 之后每次扩展,看向左能到达的那些点中,最左以及最右能到哪些点,更新. 看向右能到达的那些点中,最左以及最右能到哪些点,更新. 最左最右 ...
 - CodeVS1380 没有上司的舞会 [树形DP]
			
题目传送门 没有上司的舞会 题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个 ...
 - 如何正确地使用Java的@deprecated标注
			
没有什么事情比看到一个没有任何说明的@deprecated标注更让人愤怒的事情了.这种做法只能让人困惑,我到底还要不要用这个已经‘废弃’的方法?如果开发者不希望某个方法再被人用的话,就要好好地为@de ...
 - iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置
			
iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置 ios9音频应用播放控制 在“iOS 9音频应用播放音频之ios9音频基本功能”一文可以看到AVAudioPlayer类有很多的属性以及方法 ...
 - Hibernate hql(hibernate query language)基础查询
			
在开发过程中,数据库的操作我们其实更多的用到的是查询功能,今天开始学习hql的查询. 1.加入必要的工具 2.Hibernate配备的一种非常强大的查询语言,这种查询语言看上去很像sql.但是不要被语 ...
 - 【20181024T2】小C的序列【GCD性质+链表】
			
题面 [错解] 一眼不可做啊 哎分治? 算不了啊 真的是,打暴力走人 20pts (事实上,还有20pts是随机数据,加个小小的特判就可以) [正解] 首先,从l开始往后gcd最多只有O(log)种取 ...
 - 第2篇--JVM的内存区域划分
			
学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行 ...