gpt4 book ai didi

c# - 创建 Zip 文件时如何忽略时间戳?

转载 作者:行者123 更新时间:2023-12-05 06:38:32 26 4
gpt4 key购买 nike

我有多个服务器执行生成一些文件/文件夹数据的相同任务,并且需要在回调之前对其进行打包,然后对其进行比较,但偶然发现了两个相同的数据文件夹创建两个不同文件的问题。我正在使用这个功能:

ZipFile.CreateFromDirectory(...) 

这适用于不同文件夹中的相同数据:

C:\a\data\* 
C:\b\data\*

这会创建两个不同的 zip 存档,唯一​​的区别是它们的页眉和页脚。但是,如果我从单个文件夹中创建两个文件 - 它是相同的。我假设一些时间戳(创建数据、修改数据等)被写入存档。

如何指定从相同数据创建的文件应该相同? (忽略全局元信息)

最佳答案

好吧,通过手动从文件夹创建存档并设置条目的最后修改时间,问题很容易解决:

    public static void ZipDirectory(string input, string output, CompressionLevel level)
{

input = Path.GetFullPath(input);
using (var fs = File.OpenWrite(output))
using (var za = new ZipArchive(fs, ZipArchiveMode.Create))
{
foreach (var filePath in Directory.GetFiles(input, "*", SearchOption.AllDirectories).OrderBy(x => x))
{
var name = filePath.Replace(input, "").TrimStart('\\', '/');
var e = za.CreateEntry(name, level);
using (var zes = e.Open())
{
using (var fes = File.OpenRead(filePath))
{
fes.CopyTo(zes);
}
}
}
}

using (var za = ZipFile.Open(output, ZipArchiveMode.Update))
{
foreach (var e in za.Entries)
{
e.LastWriteTime = new DateTimeOffset(1980, 1, 1, 0, 0, 0, 0, TimeSpan.Zero);
}
}
}

这样我的 zip 存档就会忽略任何与文件无关的元信息。

关于c# - 创建 Zip 文件时如何忽略时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45862540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com