代码之家  ›  专栏  ›  技术社区  ›  Terry

正在设置ZipArchiveEntry。LastWriteTime以秒为单位丢失精度

  •  0
  • Terry  · 技术社区  · 5 年前

    我正在努力设置 ZipArchiveEntry.LastWriteTime 所以当提取时,它是“完全”相同的时间,但我得到了随机的时间差。下面是一个具体的例子。

    var fileName = @"C:\BTR\Publish\ESS\Test\RTX\Global.asax";
    var sourceRoot = @"C:\BTR\Publish\ESS\Test\RTX"; // Want entry full name to start with RTX
    var target = @"C:\BTR\Publish\LWT.Test.zip";
    
    var lwt = File.GetLastWriteTime(fileName);
    Console.WriteLine( $"File: {fileName}, Date {lwt:yyyy-MM-dd HH:mm:ss.ff}" );
    
    using ( var fs = File.Create( target ) )
    using (var stream = new ZipArchive(fs, ZipArchiveMode.Create))
    using (var source = File.OpenRead(fileName))
    {
        var rootLength = Path.GetDirectoryName(sourceRoot).Length;
        var entryName = fileName.Substring(rootLength + 1);
    
        var entry = stream.CreateEntry(entryName, CompressionLevel.Fastest);
        
        entry.LastWriteTime = lwt;
        Console.WriteLine( $"ZipArchiveEntry: {fileName}, File Date: {lwt:yyyy-MM-dd HH:mm:ss.ff}, Zip Date: {entry.LastWriteTime:yyyy-MM-dd HH:mm:ss.ff}" );
        
        using (var es = entry.Open())
        {
            source.CopyTo(es);
        }
    }
    
    DateTime zipLwt;
    
    using (var fs = File.Open(target, FileMode.Open))
    using (var zip = new ZipArchive(fs, ZipArchiveMode.Read))
    {
        zipLwt = zip.Entries[ 0 ].LastWriteTime.DateTime;
        Console.WriteLine( $"Zip File Entry: {zip.Entries[0].FullName}: Date {zipLwt:yyyy-MM-dd HH:mm:ss.ff}" );
    }
    
    Console.WriteLine($"Date Difference: {(lwt - zipLwt).TotalMilliseconds}ms" );
    

    此代码输出:

    File: C:\BTR\Publish\ESS\Test\RTX\Global.asax, Date 2016-10-14 05:54:49.98 
    ZipArchiveEntry: C:\BTR\Publish\ESS\Test\RTX\Global.asax, File Date: 2016-10-14 05:54:49.98, Zip Date: 2016-10-14 05:54:49.98
    Zip File Entry: RTX\Global.asax: Date 2016-10-14 05:54:48.00 Date
    Difference: 1989.243ms
    

    关于如何确定日期有什么想法吗?当我设置 LastWriteTime 根据输出,它看起来不错,但当我提取它时,它是错误的。

    0 回复  |  直到 5 年前