在服务器和windows 10上,使用相同文件的C#生成不同大小的输出Zip

在服务器和windows 10上,使用相同文件的C#生成不同大小的输出Zip,c#,windows,zip,C#,Windows,Zip,有一个dll,如果我们在windows 10和windows server 2012上使用相同的代码压缩它,它会产生不同的大小。大小差异正好是5个字节。C#代码为 磁盘上的大小相同,但实际大小相差5字节。两个Zip文件的PFA Zip信息 不保证zip格式具有单一表示形式;它可以是不同的大小,这取决于实现的具体情况(即,有多个编码选项可用,它可以选择也可以不选择绝对最佳的编码选项)。唯一重要的问题是:它是否解压缩回原始内容?如果它无法解压缩,那么它很有趣。但大小不同本身并不意味着什么 如果您想要

有一个dll,如果我们在windows 10和windows server 2012上使用相同的代码压缩它,它会产生不同的大小。大小差异正好是5个字节。C#代码为


磁盘上的大小相同,但实际大小相差5字节。两个Zip文件的PFA Zip信息

不保证zip格式具有单一表示形式;它可以是不同的大小,这取决于实现的具体情况(即,有多个编码选项可用,它可以选择也可以不选择绝对最佳的编码选项)。唯一重要的问题是:它是否解压缩回原始内容?如果它无法解压缩,那么它很有趣。但大小不同本身并不意味着什么

如果您想要获得完全相同的zip输出的绝对保证,那么您必须找到一个实现,作为一个文档化的特性提供输出稳定性;您正在使用的实现显然没有提供这种功能。通常像zip这样的工具都希望保留在不同版本之间悄悄改进选择的功能(有时它可能会试图让事情变得更好,但有时会带来更糟的副作用)


如果您希望总是返回完全相同的字节:那么zip可能不是适合您的文件格式,除非您只比较内部有效负载的大小和内容(即,一旦解压缩,它们将是什么),不是zip文件本身。

两台服务器都是64位的吗?都有相同的文件系统NTFS吗?磁盘上的大小是文件系统的一个特征,而不是实际的文件负载/内容;即使文件字节大小不同:zip不是“只有一种可能的方式来表示此数据”格式-完全相同的内容可以采用不同的输出大小,具体取决于在实现中所做的选择是的,两种系统都是64位和NTFS。@Marc:我同意磁盘大小是文件系统的一项功能。我的问题是,为什么相同的代码在不同的Windows操作系统上压缩相同的dll,产生不同的大小,以及如何避免这种情况?
private static void Zip()
        {
            var fileInfo = new FileInfo(@"C:\USB\adammigrate.dll");
            using (Stream stream = File.Open(@"C:\USB\adammigrate.dll", FileMode.Open, FileAccess.Read, FileShare.Read))
            using (var zipArchive = ZipFile.Open(@"C:\USB\adammigrate1.zip", ZipArchiveMode.Create))
            {
                var entry = zipArchive.CreateEntry("adammigrate.dll", CompressionLevel.NoCompression);
                entry.LastWriteTime = fileInfo.LastWriteTime.ToUniversalTime();
                using (Stream stream2 = entry.Open())
                {
                    var buffer = new byte[BufferSize];
                    int numBytesRead;
                    while ((numBytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        stream2.Write(buffer, 0, numBytesRead);
                    }
                }
            }
        }