C# ZipHelper C#公共类 -- ZipArchive实现压缩和解压
从网上找来个ZipArchive来压缩和解压缩的类,供参考吧
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.IO;
- using System.IO.Compression;
- using System.Linq;
- using System.Text.RegularExpressions;
- using System.Windows.Forms;
- using Shared;
- namespace Helpers
- {
- public static class ZipFileHelper
- {
- #region Methods
- /// <summary>
- /// 创建 zip 存档,该存档包含指定目录的文件和目录。
- /// </summary>
- /// <param name="sourceDirectoryName">要存档的目录的路径,指定为相对路径或绝对路径。 相对路径是指相对于当前工作目录的路径。</param>
- /// <param name="destinationArchiveFileName">要生成的存档路径,指定为相对路径或绝对路径。 相对路径是指相对于当前工作目录的路径。</param>
- /// <param name="compressionLevel"></param>
- /// <param name="includeBaseDirectory">压缩包中是否包含父目录</param>
- public static bool CreatZipFileFromDirectory(string sourceDirectoryName, string destinationArchiveFileName,
- CompressionLevel compressionLevel = CompressionLevel.NoCompression,
- bool includeBaseDirectory = true)
- {
- try
- {
- if (Directory.Exists(sourceDirectoryName)) //目录
- if (!File.Exists(destinationArchiveFileName))
- {
- ZipFile.CreateFromDirectory(sourceDirectoryName, destinationArchiveFileName,
- compressionLevel, includeBaseDirectory);
- }
- else
- {
- var toZipFileDictionaryList = GetAllDirList(sourceDirectoryName, includeBaseDirectory);
- using (
- var archive = ZipFile.Open(destinationArchiveFileName, ZipArchiveMode.Update)
- )
- {
- foreach (var toZipFileKey in toZipFileDictionaryList.Keys)
- if (toZipFileKey != destinationArchiveFileName)
- {
- var toZipedFileName = Path.GetFileName(toZipFileKey);
- var toDelArchives = new List<ZipArchiveEntry>();
- foreach (var zipArchiveEntry in archive.Entries)
- if (toZipedFileName != null &&
- (zipArchiveEntry.FullName.StartsWith(toZipedFileName) ||
- toZipedFileName.StartsWith(zipArchiveEntry.FullName)))
- toDelArchives.Add(zipArchiveEntry);
- foreach (var zipArchiveEntry in toDelArchives)
- zipArchiveEntry.Delete();
- archive.CreateEntryFromFile(toZipFileKey, toZipFileDictionaryList[toZipFileKey],
- compressionLevel);
- }
- }
- }
- else if (File.Exists(sourceDirectoryName))
- if (!File.Exists(destinationArchiveFileName))
- ZipFile.CreateFromDirectory(sourceDirectoryName, destinationArchiveFileName,
- compressionLevel, false);
- else
- using (
- var archive = ZipFile.Open(destinationArchiveFileName, ZipArchiveMode.Update)
- )
- {
- if (sourceDirectoryName != destinationArchiveFileName)
- {
- var toZipedFileName = Path.GetFileName(sourceDirectoryName);
- var toDelArchives = new List<ZipArchiveEntry>();
- foreach (var zipArchiveEntry in archive.Entries)
- if (toZipedFileName != null &&
- (zipArchiveEntry.FullName.StartsWith(toZipedFileName) ||
- toZipedFileName.StartsWith(zipArchiveEntry.FullName)))
- toDelArchives.Add(zipArchiveEntry);
- foreach (var zipArchiveEntry in toDelArchives)
- zipArchiveEntry.Delete();
- archive.CreateEntryFromFile(sourceDirectoryName, toZipedFileName, compressionLevel);
- }
- }
- else
- return false;
- return true;
- }
- catch (Exception exception)
- {
- LogHelper.LogError("Error! ", exception);
- MessageBox.Show(exception.StackTrace, exception.Source);
- return false;
- }
- }
- /// <summary>
- /// 创建 zip 存档,该存档包含指定目录的文件和目录。
- /// </summary>
- /// <param name="sourceDirectoryName">要存档的目录的路径,指定为相对路径或绝对路径。 相对路径是指相对于当前工作目录的路径。</param>
- /// <param name="destinationArchiveFileName">要生成的存档路径,指定为相对路径或绝对路径。 相对路径是指相对于当前工作目录的路径。</param>
- /// <param name="compressionLevel"></param>
- public static bool CreatZipFileFromDictionary(Dictionary<string, string> sourceDirectoryName,
- string destinationArchiveFileName,
- CompressionLevel compressionLevel = CompressionLevel.NoCompression)
- {
- try
- {
- using (FileStream zipToOpen = new FileStream(destinationArchiveFileName, FileMode.OpenOrCreate))
- {
- using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
- {
- foreach (var toZipFileKey in sourceDirectoryName.Keys)
- if (toZipFileKey != destinationArchiveFileName)
- {
- var toZipedFileName = Path.GetFileName(toZipFileKey);
- var toDelArchives = new List<ZipArchiveEntry>();
- foreach (var zipArchiveEntry in archive.Entries)
- if (toZipedFileName != null &&
- (zipArchiveEntry.FullName.StartsWith(toZipedFileName) ||
- toZipedFileName.StartsWith(zipArchiveEntry.FullName)))
- toDelArchives.Add(zipArchiveEntry);
- foreach (var zipArchiveEntry in toDelArchives)
- zipArchiveEntry.Delete();
- archive.CreateEntryFromFile(toZipFileKey, sourceDirectoryName[toZipFileKey],
- compressionLevel);
- }
- }
- }
- return true;
- }
- catch (Exception exception)
- {
- LogHelper.LogError("Error! ", exception);
- MessageBox.Show(exception.StackTrace, exception.Source);
- return false;
- }
- }
- /// <summary>
- /// 递归删除文件夹目录及文件
- /// </summary>
- /// <param name="baseDirectory"></param>
- /// <returns></returns>
- public static bool DeleteFolder(string baseDirectory)
- {
- var successed = true;
- try
- {
- if (Directory.Exists(baseDirectory)) //如果存在这个文件夹删除之
- {
- foreach (var directory in Directory.GetFileSystemEntries(baseDirectory))
- if (File.Exists(directory))
- File.Delete(directory); //直接删除其中的文件
- else
- successed = DeleteFolder(directory); //递归删除子文件夹
- Directory.Delete(baseDirectory); //删除已空文件夹
- }
- }
- catch (Exception exception)
- {
- LogHelper.LogError("Error! ", exception);
- successed = false;
- }
- return successed;
- }
- /// <summary>
- /// 调用bat删除目录,以防止系统底层的异步删除机制
- /// </summary>
- /// <param name="dirPath"></param>
- /// <returns></returns>
- public static bool DeleteDirectoryWithCmd(string dirPath)
- {
- var process = new Process(); //string path = ...;//bat路径
- var processStartInfo = new ProcessStartInfo("CMD.EXE", "/C rd /S /Q \"" + dirPath + "\"")
- {
- UseShellExecute = false,
- RedirectStandardOutput = true
- }; //第二个参数为传入的参数,string类型以空格分隔各个参数
- process.StartInfo = processStartInfo;
- process.Start();
- process.WaitForExit();
- var output = process.StandardOutput.ReadToEnd();
- if (string.IsNullOrWhiteSpace(output))
- return true;
- return false;
- }
- /// <summary>
- /// 调用bat删除文件,以防止系统底层的异步删除机制
- /// </summary>
- /// <param name="filePath"></param>
- /// <returns></returns>
- public static bool DelFileWithCmd(string filePath)
- {
- var process = new Process(); //string path = ...;//bat路径
- var processStartInfo = new ProcessStartInfo("CMD.EXE", "/C del /F /S /Q \"" + filePath + "\"")
- {
- UseShellExecute = false,
- RedirectStandardOutput = true
- }; //第二个参数为传入的参数,string类型以空格分隔各个参数
- process.StartInfo = processStartInfo;
- process.Start();
- process.WaitForExit();
- var output = process.StandardOutput.ReadToEnd();
- if (output.Contains(filePath))
- return true;
- return false;
- }
- /// <summary>
- /// 获取目录下所有[文件名,要压缩的相对文件名]字典
- /// </summary>
- /// <param name="strBaseDir"></param>
- /// <param name="includeBaseDirectory"></param>
- /// <param name="namePrefix"></param>
- /// <returns></returns>
- public static Dictionary<string, string> GetAllDirList(string strBaseDir,
- bool includeBaseDirectory = false, string namePrefix = "")
- {
- var resultDictionary = new Dictionary<string, string>();
- var directoryInfo = new DirectoryInfo(strBaseDir);
- var directories = directoryInfo.GetDirectories();
- var fileInfos = directoryInfo.GetFiles();
- if (includeBaseDirectory)
- namePrefix += directoryInfo.Name + "\\";
- foreach (var directory in directories)
- resultDictionary =
- resultDictionary.Concat(GetAllDirList(directory.FullName, true, namePrefix))
- .ToDictionary(k => k.Key, k => k.Value); //.FullName是某个子目录的绝对地址,
- foreach (var fileInfo in fileInfos)
- if (!resultDictionary.ContainsKey(fileInfo.FullName))
- resultDictionary.Add(fileInfo.FullName, namePrefix + fileInfo.Name);
- return resultDictionary;
- }
- /// <summary>
- /// Zip解压并更新目标文件
- /// </summary>
- /// <param name="zipFilePath">Zip压缩包路径</param>
- /// <param name="unZipDir">解压目标路径</param>
- /// <returns></returns>
- public static bool UnZip(string zipFilePath, string unZipDir)
- {
- bool resualt;
- try
- {
- unZipDir = unZipDir.EndsWith(@"\") ? unZipDir : unZipDir + @"\";
- var directoryInfo = new DirectoryInfo(unZipDir);
- if (!directoryInfo.Exists)
- directoryInfo.Create();
- var fileInfo = new FileInfo(zipFilePath);
- if (!fileInfo.Exists)
- return false;
- using (
- var zipToOpen = new FileStream(zipFilePath, FileMode.Open, FileAccess.ReadWrite,
- FileShare.Read))
- {
- using (var archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read))
- {
- foreach (var zipArchiveEntry in archive.Entries)
- if (!zipArchiveEntry.FullName.EndsWith("/"))
- {
- var entryFilePath = Regex.Replace(zipArchiveEntry.FullName.Replace("/", @"\"),
- @"^\\*", "");
- var filePath = directoryInfo + entryFilePath; //设置解压路径
- var content = new byte[zipArchiveEntry.Length];
- zipArchiveEntry.Open().Read(content, , content.Length);
- if (File.Exists(filePath) && content.Length == new FileInfo(filePath).Length)
- continue; //跳过相同的文件,否则覆盖更新
- var sameDirectoryNameFilePath = new DirectoryInfo(filePath);
- if (sameDirectoryNameFilePath.Exists)
- {
- sameDirectoryNameFilePath.Delete(true);
- DeleteDirectoryWithCmd(filePath);
- /*if (!DeleteDirectoryWithCmd(filePath))
- {
- Console.WriteLine(filePath + "删除失败");
- resualt = false;
- break;
- }*/
- }
- var sameFileNameFilePath = new FileInfo(filePath);
- if (sameFileNameFilePath.Exists)
- {
- sameFileNameFilePath.Delete();
- DelFileWithCmd(filePath);
- /*if (!DelFileWithCmd(filePath))
- {
- Console.WriteLine(filePath + "删除失败");
- resualt = false;
- break;
- }*/
- }
- var greatFolder = Directory.GetParent(filePath);
- if (!greatFolder.Exists) greatFolder.Create();
- File.WriteAllBytes(filePath, content);
- }
- }
- }
- resualt = true;
- }
- catch
- (Exception exception)
- {
- LogHelper.LogError("Error! ", exception);
- resualt = false;
- }
- return resualt;
- }
- #endregion
- }
- }
出处:https://www.cnblogs.com/Chary/p/No0000DF.html
==============================================
自己在项目中的使用:
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.IO.Compression;
- using System.Linq;
- using System.Diagnostics;
- using System.Text.RegularExpressions;
- using System.Windows.Forms;
- namespace Car.AutoUpdate.Comm
- {
- public class ZipArchiveHelper
- {
- #region Methods
- /// <summary>
- /// 创建 zip 存档,该文档包含指定目录的文件和子目录。
- /// </summary>
- /// <param name="sourceDirectoryName">将要压缩存档的文件目录的路径,可以为相对路径或绝对路径。 相对路径是指相对于当前工作目录的路径。</param>
- /// <param name="destinationArchiveFileName">将要生成的压缩包的存档路径,可以为相对路径或绝对路径。相对路径是指相对于当前工作目录的路径。</param>
- /// <param name="compressionLevel">指示压缩操作是强调速度还是强调压缩大小的枚举值</param>
- /// <param name="includeBaseDirectory">压缩包中是否包含父目录</param>
- public static bool CreatZip(string sourceDirectoryName, string destinationArchiveFileName, CompressionLevel compressionLevel = CompressionLevel.NoCompression, bool includeBaseDirectory = true)
- {
- try
- {
- if (Directory.Exists(sourceDirectoryName))
- if (!File.Exists(destinationArchiveFileName))
- {
- ZipFile.CreateFromDirectory(sourceDirectoryName, destinationArchiveFileName, compressionLevel, includeBaseDirectory);
- }
- else
- {
- var toZipFileDictionaryList = GetAllDirList(sourceDirectoryName, includeBaseDirectory);
- using (var archive = ZipFile.Open(destinationArchiveFileName, ZipArchiveMode.Update))
- {
- foreach (var toZipFileKey in toZipFileDictionaryList.Keys)
- if (toZipFileKey != destinationArchiveFileName)
- {
- var toZipedFileName = Path.GetFileName(toZipFileKey);
- var toDelArchives = new List<ZipArchiveEntry>();
- foreach (var zipArchiveEntry in archive.Entries)
- if (toZipedFileName != null && (zipArchiveEntry.FullName.StartsWith(toZipedFileName) || toZipedFileName.StartsWith(zipArchiveEntry.FullName)))
- toDelArchives.Add(zipArchiveEntry);
- foreach (var zipArchiveEntry in toDelArchives)
- zipArchiveEntry.Delete();
- archive.CreateEntryFromFile(toZipFileKey, toZipFileDictionaryList[toZipFileKey], compressionLevel);
- }
- }
- }
- else if (File.Exists(sourceDirectoryName))
- if (!File.Exists(destinationArchiveFileName))
- ZipFile.CreateFromDirectory(sourceDirectoryName, destinationArchiveFileName, compressionLevel, false);
- else
- using (var archive = ZipFile.Open(destinationArchiveFileName, ZipArchiveMode.Update))
- {
- if (sourceDirectoryName != destinationArchiveFileName)
- {
- var toZipedFileName = Path.GetFileName(sourceDirectoryName);
- var toDelArchives = new List<ZipArchiveEntry>();
- foreach (var zipArchiveEntry in archive.Entries)
- if (toZipedFileName != null && (zipArchiveEntry.FullName.StartsWith(toZipedFileName) || toZipedFileName.StartsWith(zipArchiveEntry.FullName)))
- toDelArchives.Add(zipArchiveEntry);
- foreach (var zipArchiveEntry in toDelArchives)
- zipArchiveEntry.Delete();
- archive.CreateEntryFromFile(sourceDirectoryName, toZipedFileName, compressionLevel);
- }
- }
- else
- return false;
- return true;
- }
- catch (Exception ex)
- {
- LogHelper.Error("Error! ", ex);
- //MessageBox.Show(ex.StackTrace, ex.Source);
- UtilityHelper.ShowMessageDialog(ex.StackTrace);
- return false;
- }
- }
- /// <summary>
- /// 创建 zip 存档,该存档包含指定目录的文件和目录。
- /// </summary>
- /// <param name="sourceDirectoryName">将要压缩存档的文件目录的路径,可以为相对路径或绝对路径。 相对路径是指相对于当前工作目录的路径。</param>
- /// <param name="destinationArchiveFileName">将要生成的压缩包的存档路径,可以为相对路径或绝对路径。 相对路径是指相对于当前工作目录的路径。</param>
- /// <param name="compressionLevel">指示压缩操作是强调速度还是强调压缩大小的枚举值</param>
- public static bool CreatZip(Dictionary<string, string> sourceDirectoryName, string destinationArchiveFileName, CompressionLevel compressionLevel = CompressionLevel.NoCompression)
- {
- try
- {
- using (FileStream zipToOpen = new FileStream(destinationArchiveFileName, FileMode.OpenOrCreate))
- {
- using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
- {
- foreach (var toZipFileKey in sourceDirectoryName.Keys)
- if (toZipFileKey != destinationArchiveFileName)
- {
- var toZipedFileName = Path.GetFileName(toZipFileKey);
- var toDelArchives = new List<ZipArchiveEntry>();
- foreach (var zipArchiveEntry in archive.Entries)
- if (toZipedFileName != null && (zipArchiveEntry.FullName.StartsWith(toZipedFileName) || toZipedFileName.StartsWith(zipArchiveEntry.FullName)))
- toDelArchives.Add(zipArchiveEntry);
- foreach (var zipArchiveEntry in toDelArchives)
- zipArchiveEntry.Delete();
- archive.CreateEntryFromFile(toZipFileKey, sourceDirectoryName[toZipFileKey], compressionLevel);
- }
- }
- }
- return true;
- }
- catch (Exception ex)
- {
- LogHelper.Error("Error! ", ex);
- UtilityHelper.ShowMessageDialog(ex.StackTrace);
- return false;
- }
- }
- /// <summary>
- /// 递归删除磁盘上的指定文件夹目录及文件
- /// </summary>
- /// <param name="baseDirectory"></param>
- /// <returns></returns>
- private static bool DeleteFolder(string baseDirectory)
- {
- var successed = true;
- try
- {
- if (Directory.Exists(baseDirectory)) //如果存在这个文件夹删除之
- {
- foreach (var directory in Directory.GetFileSystemEntries(baseDirectory))
- if (File.Exists(directory))
- File.Delete(directory); //直接删除其中的文件
- else
- successed = DeleteFolder(directory); //递归删除子文件夹
- Directory.Delete(baseDirectory); //删除已空文件夹
- }
- }
- catch (Exception ex)
- {
- LogHelper.Error("Error! ", ex);
- successed = false;
- }
- return successed;
- }
- /// <summary>
- /// 调用CMD,命令行删除磁盘上的指定目录,以防止系统底层的异步删除机制
- /// </summary>
- /// <param name="dirPath"></param>
- /// <returns></returns>
- private static bool DeleteDirectoryWithCmd(string dirPath)
- {
- var process = new Process();
- //ProcessStartInfo构造方法的第二个参数是执行第一个命令的所需要传入的参数,以空格分隔各个参数
- var processStartInfo = new ProcessStartInfo("CMD.EXE", "/C rd /S /Q \"" + dirPath + "\"") { UseShellExecute = false, RedirectStandardOutput = true };
- process.StartInfo = processStartInfo;
- process.Start();
- process.WaitForExit();
- var output = process.StandardOutput.ReadToEnd();
- if (string.IsNullOrWhiteSpace(output))
- return true;
- return false;
- }
- /// <summary>
- /// 调用CMD,命令行删除磁盘上的指定目录,以防止系统底层的异步删除机制
- /// </summary>
- /// <param name="filePath"></param>
- /// <returns></returns>
- private static bool DelFileWithCmd(string filePath)
- {
- var process = new Process();
- //ProcessStartInfo构造方法的第二个参数是执行第一个命令的所需要传入的参数,以空格分隔各个参数
- var processStartInfo = new ProcessStartInfo("CMD.EXE", "/C del /F /S /Q \"" + filePath + "\"") { UseShellExecute = false, RedirectStandardOutput = true };
- process.StartInfo = processStartInfo;
- process.Start();
- process.WaitForExit();
- var output = process.StandardOutput.ReadToEnd();
- if (output.Contains(filePath))
- return true;
- return false;
- }
- /// <summary>
- /// 递归获取磁盘上的指定目录下所有文件的集合,返回类型是:字典[文件名,要压缩的相对文件名]
- /// </summary>
- /// <param name="strBaseDir"></param>
- /// <param name="includeBaseDirectory"></param>
- /// <param name="namePrefix"></param>
- /// <returns></returns>
- private static Dictionary<string, string> GetAllDirList(string strBaseDir, bool includeBaseDirectory = false, string namePrefix = "")
- {
- var resultDictionary = new Dictionary<string, string>();
- var directoryInfo = new DirectoryInfo(strBaseDir);
- var directories = directoryInfo.GetDirectories();
- var fileInfos = directoryInfo.GetFiles();
- if (includeBaseDirectory)
- namePrefix += directoryInfo.Name + "\\";
- foreach (var directory in directories)
- resultDictionary = resultDictionary.Concat(GetAllDirList(directory.FullName, true, namePrefix)).ToDictionary(k => k.Key, k => k.Value); //FullName是某个子目录的绝对地址,
- foreach (var fileInfo in fileInfos)
- if (!resultDictionary.ContainsKey(fileInfo.FullName))
- resultDictionary.Add(fileInfo.FullName, namePrefix + fileInfo.Name);
- return resultDictionary;
- }
- /// <summary>
- /// 解压Zip文件,并覆盖保存到指定的目标路径文件夹下
- /// </summary>
- /// <param name="zipFilePath">将要解压缩的zip文件的路径</param>
- /// <param name="unZipDir">解压后将zip中的文件存储到磁盘的目标路径</param>
- /// <returns></returns>
- public static bool UnZip(string zipFilePath, string unZipDir)
- {
- bool resualt;
- try
- {
- unZipDir = unZipDir.EndsWith(@"\") ? unZipDir : unZipDir + @"\";
- var directoryInfo = new DirectoryInfo(unZipDir);
- if (!directoryInfo.Exists)
- directoryInfo.Create();
- var fileInfo = new FileInfo(zipFilePath);
- if (!fileInfo.Exists)
- return false;
- using (var zipToOpen = new FileStream(zipFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read))
- {
- using (var archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read))
- {
- foreach (var zipArchiveEntry in archive.Entries)
- if (!zipArchiveEntry.FullName.EndsWith("/"))
- {
- var entryFilePath = Regex.Replace(zipArchiveEntry.FullName.Replace("/", @"\"), @"^\\*", "");
- var filePath = directoryInfo + entryFilePath; //设置解压路径
- var content = new byte[zipArchiveEntry.Length];
- zipArchiveEntry.Open().Read(content, , content.Length);
- // mq 2019-06-14: 注销下面的代码,全部覆盖现有文件
- //if (File.Exists(filePath) && content.Length == new FileInfo(filePath).Length)
- //{
- // continue; //跳过相同的文件,否则覆盖更新
- //}
- //var sameDirectoryNameFilePath = new DirectoryInfo(filePath);
- //if (sameDirectoryNameFilePath.Exists)
- //{
- // sameDirectoryNameFilePath.Delete(true);
- // DeleteDirectoryWithCmd(filePath);
- //}
- //var sameFileNameFilePath = new FileInfo(filePath);
- //if (sameFileNameFilePath.Exists)
- //{
- // sameFileNameFilePath.Delete();
- // DelFileWithCmd(filePath);
- // /*if (!DelFileWithCmd(filePath))
- // {
- // Console.WriteLine(filePath + "删除失败");
- // resualt = false;
- // break;
- // }*/
- //}
- var greatFolder = Directory.GetParent(filePath);
- if (!greatFolder.Exists)
- greatFolder.Create();
- File.WriteAllBytes(filePath, content);
- }
- }
- }
- resualt = true;
- }
- catch (Exception ex)
- {
- LogHelper.Error("Error! ", ex);
- resualt = false;
- }
- return resualt;
- }
- /// <summary>
- /// 获取Zip压缩包中的文件列表
- /// </summary>
- /// <param name="zipFilePath">Zip压缩包文件的物理路径</param>
- /// <returns></returns>
- public static List<string> GetZipFileList(string zipFilePath)
- {
- List<string> fList = new List<string>();
- if (!File.Exists(zipFilePath))
- return fList;
- try
- {
- using (var zipToOpen = new FileStream(zipFilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
- {
- using (var archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read))
- {
- foreach (var zipArchiveEntry in archive.Entries)
- if (!zipArchiveEntry.FullName.EndsWith("/"))
- fList.Add(Regex.Replace(zipArchiveEntry.FullName.Replace("/", @"\"), @"^\\*", ""));
- }
- }
- }
- catch (Exception ex)
- {
- LogHelper.Error("Error! ", ex);
- }
- return fList;
- }
- #endregion
- }
- }
C# ZipHelper C#公共类 -- ZipArchive实现压缩和解压的更多相关文章
- PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载
文章转载自:https://my.oschina.net/junn/blog/104464 PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PH ...
- PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩 &&搞个鸡巴毛,写少了个‘/’号,浪费了一天
PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有 ...
- ZipHelper 压缩和解压帮助类
ZipHelper 压缩和解压帮助类 关于本文档的说明 本文档基于ICSharpCode.SharpZipLib.dll的封装,常用的解压和压缩方法都已经涵盖在内,都是经过项目实战积累下来的 欢迎传播 ...
- 【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货
关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...
- c#自带压缩类实现的多文件压缩和解压
用c#自带的System.IO.Compression命名空间下的压缩类实现的多文件压缩和解压功能,缺点是多文件压缩包的解压只能调用自身的解压方法,和现有的压缩软件不兼容.下面的代码没有把多文件的目录 ...
- 利用c#自带的类对文件进行压缩和解压处理
在做网络传输文件的小例子的时候,当传输的文件比较大的时候,我们通常都是将文件经过压缩之后才进行传输,以前都是利用第三方插件来对文件进行压缩的,但是现在我发现了c#自带的类库也能够实现文件的压缩,实际上 ...
- Linux 时间日期类、搜索查找类、 压缩和解压类指令
l 时间日期类 date指令-显示当前日期 基本语法 1) date (功能描述:显示当前时间) 2) date +%Y (功能描述:显示当前年份) 3) date +%m (功能描述:显示当前月份) ...
- Linux时间日期类,压缩和解压类
一.时间日期类 1.data指令 1.基本指令 date 显示当前日期 data +%Y 显示当前年份 data +%m 显示当前月份 data +%d 显示当前天 data +%Y-%m-%d %H ...
- 【转】Java压缩和解压文件工具类ZipUtil
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
随机推荐
- vs2015调试iisexpress无法启动的问题解决方案整理
我上传的项目代码被同事下载之后使用iisexpress调试一直报错,iisexpress无法启动只能用自己本地的iis,我本地的代码却没问题,试了两种解决办法,问题解决了,在此记录一下也总结一下 方法 ...
- sqlserver数据库中sql的使用
目录: 1. 分组排序更新 2. 将查询结果插入到新的表中 3. 创建/更新存储过程 4. 创建/更新视图 5. 插入数据 6. 增加表格的列 7. 创建表格 8. 创建索引 9. 递归查询 1. 分 ...
- TCP/IP三次握手和四次挥手
原博链接:https://www.cnblogs.com/Andya/p/7272462.html
- [Java] 项目红色叹号 案例1则
一般红色叹号是build path出错. 除了检查出错的library外,还要注意Order an Export选项中未勾选的Library. 之前导入项目后,没有勾选JRE和Maven Depend ...
- eolinker 安装时遇到的坑
Access denied for user 'root'@'localhost' (using password:YES) 从githup 上下载的代码,直接把release 里的文件发布到服务器上 ...
- Bootstrap框架整理
bootstrap框架的介绍 栅格系统 bootstrap框架把整个浏览器的宽度分为12列,并能适配各种屏幕的尺寸大小进行相应的匹配,达到调节页面大小的效果. 首先需要放置一个容器div,class= ...
- 原生sql实现restful接口调用
index.php <?php include './Request.php';include './Response.php';//获取数据$data=Request::getRequest( ...
- 【lintcode13】字符串查找
问题: 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始).如果不存在,则返回 -1. 样例:如果 ...
- Harbor使用 -- 修改80端口
在公网上,一般情况下都不暴露默认端口,避免被攻击! 以下修改harbor的默认80端口为其他端口! 我这里示例修改为1180端口! 注意:以下步骤都是在harbor目录下操作!!! 1.修改docke ...
- sin n次方 x 的降幂公式
A(n) = ∫ sinⁿx dx= ∫ sinⁿ⁻¹xsinx dx= - ∫ sinⁿ⁻¹x d(cosx)= - sinⁿ⁻¹xcosx + ∫ cosx • d(sinⁿ⁻¹)= - sinⁿ ...