【新增】压缩文件-提供文件路径,进行压缩文件成zip

This commit is contained in:
dlaren
2025-07-14 17:21:24 +08:00
parent 8543afd2c7
commit 1dbc67b3c4

View File

@@ -12,6 +12,7 @@ using System.ServiceProcess;
using System.Text.Json;
using System.Xml.Linq;
using Applications;
using ICSharpCode.SharpZipLib.Zip;
using Microsoft.Win32;
using MySql.Data.MySqlClient;
@@ -58,9 +59,72 @@ class Program
string filesurl = context.Request.QueryString["filesurl"];
// 文件名称
string desiredFileName = context.Request.QueryString["filename"];
// 需要被打包的 源目录路径
string sourceDir = context.Request.QueryString["sourceDir"];
string ip = context.Request.QueryString["ip"];
string action = context.Request.Url.AbsolutePath.ToLower();
string responseMessage = "";
// 压缩文件方法
if (action == "/zipfiles")
{
try
{
if (!Directory.Exists(sourceDir))
{
throw new DirectoryNotFoundException("源目录不存在!");
}
// 构造ZIP文件路径同级目录同名.zip
string parentDir = Directory.GetParent(sourceDir).FullName;
string folderName = new DirectoryInfo(sourceDir).Name;
string outputZipPath = Path.Combine(parentDir, $"{folderName}.zip");
// 如果ZIP已存在先删除可选
if (File.Exists(outputZipPath))
{
File.Delete(outputZipPath);
}
// 使用SharpZipLib打包
using (var zipStream = new ZipOutputStream(File.Create(outputZipPath)))
{
zipStream.SetLevel(5); // 压缩级别 (0-9)
foreach (var file in Directory.GetFiles(sourceDir, "*", SearchOption.AllDirectories))
{
string relativePath = file.Substring(sourceDir.Length + 1);
var entry = new ZipEntry(relativePath)
{
DateTime = File.GetLastWriteTime(file),
IsUnicodeText = true
};
// 保留文件属性(隐藏、只读等)
var fileAttributes = File.GetAttributes(file);
entry.ExternalFileAttributes = (int)fileAttributes << 16;
zipStream.PutNextEntry(entry);
using (var fileStream = File.OpenRead(file))
{
fileStream.CopyTo(zipStream);
}
zipStream.CloseEntry();
}
}
// 返回ZIP文件的绝对路径
responseMessage = Path.GetFullPath(outputZipPath);
}
catch (Exception ex)
{
throw new Exception($"压缩失败: {ex.Message}");
}
}
// 下载文件方法
if (action == "/downloadfiles")
{
try
@@ -72,7 +136,7 @@ class Program
{
Console.WriteLine("检测到ZIP文件开始解压...");
string extractPath = Path.Combine(folderPath, Path.GetFileNameWithoutExtension(downloadedFilePath));
ZipFile.ExtractToDirectory(downloadedFilePath, folderPath);
System.IO.Compression.ZipFile.ExtractToDirectory(downloadedFilePath, folderPath);
Console.WriteLine($"解压完成,文件保存在: {extractPath}");
// 删除原ZIP文件