需要压缩的文件:压缩文件而不压缩文件夹
压缩后:
代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FileOperation
{
class Program
{
static void Main(string[] args)
{
string srcDirPath = @"D:\test";
string zipFileName = "ss";
string[] includes = { "*.bmp", "*.docx", "*.mmp","*.txt","*.pub" };
var fileTyprSuffixes = new List<string>();
foreach(var i in includes)
{
fileTyprSuffixes.Add(i.Replace("*", ""));
}
Func<string, bool> isFileTypeIncluded = fileName =>
{
return fileTyprSuffixes.Any(fileName.EndsWith);
};
var zipFileFullPath = PackageAsZipFile(zipFileName, srcDirPath, isFileTypeIncluded);
Console.WriteLine("Complete!");
Console.ReadKey();
}
private static string PackageAsZipFile(string zipFileName,string srcDirPath, Func<string, bool> isFileTypeIncluded)
{
string zipFilePath = Path.Combine(srcDirPath, $"{zipFileName}.zip");
try
{
if (File.Exists(zipFilePath))
{
File.Delete(zipFilePath);
}
using (var zip = new FileStream(zipFilePath, FileMode.Create))
{
using (var archive = new ZipArchive(zip, ZipArchiveMode.Create))
{
var paths = Directory.EnumerateFiles(srcDirPath).Where(isFileTypeIncluded);
foreach(var p in paths)
{
archive.CreateEntryFromFile(p, Path.GetFileName(p), CompressionLevel.Fastest);
}
}
}
}
catch(Exception e)
{
throw new Exception("Unable to create zip file:", e);
}
return zipFilePath;
}
}
}
关于压缩的类,可以参考:
https://docs.microsoft.com/en-us/dotnet/api/system.io.compression.zipfile?view=netcore-3.1