需求场景: 每天下班时都要进行对N个文件目录进行带密码压缩操作并且删除目录,第二天上班又要重新解压然后使用。
创建项目后使用Nuget安装SharpZipLib扩展
开始写代码
ZipHelper.cs
using ICSharpCode.SharpZipLib.Zip;
namespace ScheduledOperation
{
/// <summary>
/// 适用与ZIP压缩
/// </summary>
public class ZipHelper
{
/// <summary>
/// 压缩文件以及目录
/// </summary>
/// <param name="targetDir">要压缩的文件目录</param>
/// <param name="zipFileName">压缩后的文件名</param>
/// <param name="password">密码</param>
/// <returns>True or False</returns>
public static bool Fastzip(string targetDir, string zipFileName, string password = "你的密码")
{
bool result = true;
try
{
bool recurse = true; // 通过递归目录结构包括所有文件
string filter = null; // 不设置过滤文件
FastZip fastZip = new FastZip();
fastZip.Password = password; //设置密码
fastZip.CreateEmptyDirectories = true;
fastZip.CreateZip(zipFileName, targetDir, recurse, filter);
}
catch
{
result = false;
}
return result;
}
/// <summary>
/// 解压缩文件
/// </summary>
/// <param name="zipFileName">压缩后的文件名</param>
/// <param name="targetDir">要解压缩的文件目录</param>
/// <param name="password">密码</param>
/// <returns>True or False</returns>
public static bool FastUnzip(string zipFileName, string targetDir, string password = "你的密码")
{
bool result = true;
if (!File.Exists(zipFileName))
return false;
if (!Directory.Exists(targetDir))
Directory.CreateDirectory(targetDir);
FastZip fastzip = new FastZip();
fastzip.Password = password;
string fileFilter = null;
fastzip.ExtractZip(zipFileName, targetDir, fileFilter);
return result;
}
}
}
Program.cs
using System;
namespace ScheduledOperation
{
class Program
{
//定义全局code list变量
public static List<string> clist = new List<string>();
public static string password = "你的密码";
static void Main(string[] args)
{
//获取当前目录
string path1 = System.Environment.CurrentDirectory;
var targetpath = path1 + @"\sources.txt";
clist =codelist(targetpath);
if (args != null && args.Length > 0)
{
if (args[0] == "zip")
{
ZipWork(clist);
}
else if (args[0] == "unzip")
{
UnZipWork(clist);
}
}
else
{
ZipWork(clist);
}
}
/// <summary>
/// 压缩文件以及目录
/// </summary>
/// <param name="codelist">文件路径List</param>
public static void ZipWork(List<string> codelist)
{
foreach (var item in codelist)
{
//Console.WriteLine(@item);
var check = ZipHelper.Fastzip(@item, @item + ".zip", password);
if (check == true)
{
Console.WriteLine("Compression succeeded");
try
{
Directory.Delete(@item, true);
}
catch (Exception e)
{
Console.WriteLine("Delete failed");
}
}
else
{
Console.WriteLine("Compression failed");
}
}
}
/// <summary>
/// 解压缩
/// </summary>
/// <param name="codelist">文件路径List</param>
public static void UnZipWork(List<string> codelist)
{
foreach (var item in codelist)
{
//string BeforPath = @item.Substring(0, @item.LastIndexOf(@"\"));
var check = ZipHelper.FastUnzip(@item + ".zip", @item, password);
if (check == true)
{
Console.WriteLine("Decompression succeeded");
try
{
File.Delete(@item + ".zip");
}
catch (Exception e)
{
Console.WriteLine("Delete failed");
}
}
else
{
Console.WriteLine("Decompression failed");
}
}
}
/// <summary>
/// 读取本地txt文件后写入到codelist中
/// </summary>
/// <param name="file_path">文件路径</param>
/// <returns>返回数据</returns>
public static List<string> codelist(string file_path)
{
List<string> codeList = new List<string>();
//创建一个StreamReader对象
FileStream fs = new FileStream(file_path, FileMode.Open, FileAccess.Read);
//读取流
StreamReader read = new StreamReader(fs);
string strReadline;
// int count=0;
//遍历读取流
while ((strReadline = read.ReadLine()) != null)
{
//添加到codeList中
codeList.Add(strReadline);
}
//关闭流
read.Close();
//关闭文件
fs.Close();
return codeList;
}
}
}
使用方法
项目编译后在当前程序目录下创建sources.txt
文件,并写入要压缩的文件目录路径。如:D:\abc
- 进行压缩操作
ScheduledOperation.exe
或者
ScheduledOperation.exe zip
- 进行解压操作
ScheduledOperation.exe unzip