我有多个服务器同样生成一些文件/文件夹数据的任务,需要在回调之前打包它,然后区分它,但偶然发现两个相同数据文件夹创建两个不同档案的问题。我正在使用这个功能:
ZipFile.CreateFromDirectory(...)
这适用于不同文件夹中的相同数据:
C:\a\data\*
C:\b\data\*
这会创建两个不同的zip存档,唯一不同的是它们的页眉和页脚。但是,如果我从单个文件夹创建两个档案 - 它是相同的。我想一些时间戳(创建数据,修改数据等)被写入存档。
如何指定从相同数据创建的档案应该相同? (忽略全局元信息)
答案 0 :(得分:0)
嗯,通过手动从文件夹创建存档,并设置条目的最后修改时间,问题很容易解决:
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存档会忽略有关文件的任何不相关的元信息。