#region[解压文件]
/// <summary>
/// 解压文件
/// </summary>
/// <param name="zipFileName">zip文件路径+zip文件名称</param>
/// <param name="targetDirectory">解压后文件保存路径</param>
/// <param name="fileFilter">解压zip文件中指定文件,若为null,则对解压后的文件不做筛选</param>
/// <returns></returns>
public static Boolean ExtractZip(string zipFileName, string targetDirectory, string fileFilter)
{
try
{
//FastZip 添加引用 ICSharpCode.SharpZipLib.Zip;
FastZip fastZip = new FastZip();
fastZip.ExtractZip(zipFileName, targetDirectory, fileFilter);
return true;
}
catch
{
return false;
}
}
//解压zip文件中某个指定文件
public void DeCompressOne()
{
string zipFileName = @"E:\20190903\测试文件\测试.zip";//zip文件路径+zip文件名
string subPath = @"E:\20190903\非zip文件\" + DateTime.Now.ToString("yyyyMMddhhmmss");
string fileFilter = "测试.txt";
System.IO.Directory.CreateDirectory(subPath);//创建文件夹,保存解压后的文件
string targetDirectory = subPath;//解压后文件保存路径
Boolean bl = ExtractZip(zipFileName, targetDirectory, fileFilter);
}
// 解压zip文件
protected void DeCompress()
{
string zipFileName = @"E:\20190903\测试文件\测试.zip";//zip文件路径+zip文件名
string subPath = @"E:\20190903\非zip文件\" + DateTime.Now.ToString("yyyyMMddhhmmss");
System.IO.Directory.CreateDirectory(subPath);//创建文件夹,保存解压后的文件
string targetDirectory = subPath;//解压后文件保存路径
Boolean bl = ExtractZip(zipFileName, targetDirectory, null);
}
#endregion
#region[压缩文件]
/// <summary>
/// 压缩文件
/// </summary>
/// <param name="zipFileName">zip文件保存路径+zip文件名称</param>
/// <param name="sourceDirectory">压缩来源文件路径</param>
/// <param name="recurse"></param>
/// <param name="fileFilter">压缩文件夹中指定文件,若为null,则压缩文件夹中所有的文件</param>
/// <returns></returns>
public static Boolean CreateZip(string zipFileName, string sourceDirectory, bool recurse, string fileFilter)
{
try
{
//FastZip 添加引用 ICSharpCode.SharpZipLib.Zip;
FastZip fastZip = new FastZip();
fastZip.CreateZip(zipFileName, sourceDirectory, recurse, fileFilter);
return true;
}
catch
{
return false;
}
}
//压缩一个文件
protected void CompressOne()
{
string subPath = @"E:\20190903\zip文件\" + DateTime.Now.ToString("yyyyMMddhhmmss");
System.IO.Directory.CreateDirectory(subPath);//创建文件夹,保存压缩后的文件
string zipFileName = subPath + @"\测试.zip";//压缩文件路径+压缩文件名(压缩文件名可以自定义)
string sourceDirectory = @"E:\20190903\测试文件\";
string fileFilter = @"测试.txt";
Boolean bl = CreateZip(zipFileName, sourceDirectory, false, fileFilter);
}
// 压缩一个文件夹
protected void Compress()
{
string subPath = @"E:\20190903\zip文件\" + DateTime.Now.ToString("yyyyMMddhhmmss");
System.IO.Directory.CreateDirectory(subPath);//创建文件夹,保存压缩后的文件
string zipFileName = subPath + @"\测试.zip";//压缩文件路径+压缩文件名(压缩文件名可以自定义)
string sourceDirectory = @"E:\20190903\测试文件\";
Boolean bl = CreateZip(zipFileName, sourceDirectory, true, null);
}
#endregion
#region[文件流的解压与压缩]
#region[Way1]
public static void Way1()
{
//压缩文件流
string str = "文件流的压缩与解压相关代码";
//使用FileStream 要添加引用 System.IO;
FileStream fs = File.OpenWrite(@"E:\20190903\测试文件\内存流处理.txt");// 打开一个现有文件或创建一个新文件以进行写入。(用于保存压缩的byte数组)
//使用GZipStream 要添加引用 System.IO.Compression; (GZipStream 提供用于压缩和解压缩流的方法和属性。提供用于压缩和解压缩流的方法和属性。)
GZipStream zipStream = new GZipStream(fs, CompressionMode.Compress);//CompressionMode.Compress:将压缩的基础流。
//使用Encoding 要添加引用:System.Text
byte[] bytes = Encoding.UTF8.GetBytes(str);
zipStream.Write(bytes, 0, bytes.Length);//从指定的字节数组中将压缩的字节写入基础流。
zipStream.Close();
fs.Close();
//解压文件流
FileStream fs2 = File.OpenRead(@"E:\20190903\测试文件\内存流处理.txt");//打开现有文件以进行读取。(txt文件保存的是byte数组)
GZipStream zipStream2 = new GZipStream(fs2, CompressionMode.Decompress);//CompressionMode.Decompress:解压缩基础流。
FileStream fs3 = File.OpenWrite(@"E:\20190903\测试文件\内存流处理2.txt");// 打开一个现有文件或创建一个新文件以进行写入。(用于保存压缩的byte数组)
int bytesRead;
while ((bytesRead = zipStream2.Read(bytes, 0, bytes.Length)) > 0) //将若干解压缩的字节读入指定的字节数组。
{
fs3.Write(bytes, 0, bytesRead);
}
fs3.Close();
zipStream2.Close();
fs2.Close();
}
#endregion
#region[Way2]
public static void Way2()
{
//压缩文件流(使用using(){} 关闭和释放不需要手动操作)
string str = "文件流的压缩与解压相关代码2";
using (FileStream fs = File.OpenWrite(@"E:\20190903\测试文件\内存流处理.txt"))
{
using (GZipStream zipStream = new GZipStream(fs, CompressionMode.Compress))
{
byte[] bytes = Encoding.UTF8.GetBytes(str);
zipStream.Write(bytes, 0, bytes.Length);
}
}
//解压文件流(使用using(){} 关闭和释放不需要手动操作)
using (FileStream fs = File.OpenRead(@"E:\20190903\测试文件\内存流处理.txt"))
{
using (GZipStream zipStream = new GZipStream(fs, CompressionMode.Decompress))
{
using (FileStream fs1 = File.OpenWrite(@"E:\20190903\测试文件\内存流处理2.txt"))
{
int bytesRead;
byte[] bytes = new byte[1024];
while ((bytesRead = zipStream.Read(bytes, 0, bytes.Length)) > 0)
{
fs1.Write(bytes, 0, bytesRead);
}
}
}
}
}
#endregion
#region[Way3]
public static void Way3()
{
string testdata = "GZip压缩和解压";
//压缩
byte[] gzipdata = CompressGZip(Encoding.UTF8.GetBytes(testdata));
//解压
byte[] undata = UnGZip(gzipdata);
var pp = Encoding.UTF8.GetString(undata);
}
//压缩文件
public static byte[] CompressGZip(byte[] rawData)
{
//MemoryStream需要添加引用 System.IO;
MemoryStream ms = new MemoryStream();
//GZipOutputStream要添加引用 ICSharpCode.SharpZipLib.GZip
GZipOutputStream compressedzipStream = new GZipOutputStream(ms);
compressedzipStream.Write(rawData, 0, rawData.Length);
compressedzipStream.Close();
return ms.ToArray();
}
//解压文件
public static byte[] UnGZip(byte[] byteArray)
{
//MemoryStream需要添加引用 System.IO;
MemoryStream re = new MemoryStream();
//GZipOutputStream要添加引用 ICSharpCode.SharpZipLib.GZip
GZipInputStream gzi = new GZipInputStream(new MemoryStream(byteArray));
int count;
byte[] data = new byte[1024];
while ((count = gzi.Read(data, 0, data.Length)) != 0)
{
re.Write(data, 0, count);
}
byte[] overarr = re.ToArray();
return overarr;
}
#endregion
#endregion