压缩文件时丢失数据

发布于 2024-10-16 12:38:34 字数 603 浏览 0 评论 0原文

我在 Windows 上使用 ruby​​zip 来压缩目录。 当我解压缩存档时,某些文件比原来小。

压缩应该是无损操作,所以我想知道为什么会发生这种情况。

这是我正在使用的代码:

require 'rubygems'
require 'find'
require 'zip/zip'

output = "c:/temp/test.zip"
zos = Zip::ZipOutputStream.new(output)

path = "C:/temp/profile"
::Find.find(path) do |file|
  next if File.directory?(file)
  entry = file.sub("#{path}/", '')

  zos.put_next_entry(entry)
  zos << File.read(file)
end
zos.close

有问题的特定文件来自 Firefox 配置文件。 cert8.db 和 key3.db

在 Linux 上的 jruby 下使用相同的文件运行相同的代码可以按预期工作 - 所有文件的大小相同。

有什么想法为什么这在 Windows 上是一个问题吗?

I am using rubyzip on windows to zip up a directory.
When I unzip the archive some of the files are smaller than they were.

Zipping should be a lossless operation so I am wondering why this is happening.

Here is the code I am using:

require 'rubygems'
require 'find'
require 'zip/zip'

output = "c:/temp/test.zip"
zos = Zip::ZipOutputStream.new(output)

path = "C:/temp/profile"
::Find.find(path) do |file|
  next if File.directory?(file)
  entry = file.sub("#{path}/", '')

  zos.put_next_entry(entry)
  zos << File.read(file)
end
zos.close

The specific files that are having an issue are from a firefox profile. cert8.db and key3.db

Running the same code under jruby on linux with the same files works as expected - all the files are the same size.

Any ideas why this is a problem on windows?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无悔心 2024-10-23 12:38:34

我认为问题在于您正在将文件作为文本而不是二进制文件读取。这两种读取文件的基本模式在换行、符号 EOF 等方面有所不同。

尝试使用 File.open(file,'rb'){|f|f.read} 而不是 >File.read(文件)

I think problem is that you are reading files as text, not as binary files. These two fundamental modes of reading files have difference in such things as linebreaks, symbols EOF, etc.

Try File.open(file,'rb'){|f|f.read} instead of File.read(file).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文