【问题标题】:erlang zip:unzip/1 {error, bad_central_directory} and {error, bad_eocd}erlang zip:unzip/1 {error, bad_central_directory} 和 {error, bad_eocd}
【发布时间】:2012-10-06 04:21:34
【问题描述】:

我一直成功使用erlang stdlib library zip:unzip/1。昨晚我遇到了这个错误:

E:\WimaxStatsParser-1.1>erl Eshell V5.9.2(使用 ^G 中止) 1> zip:unzip("e:/WimaxStatsParser-1.1/in/SomeZipFile.zip")。 {错误,bad_central_directory} 2>

有人帮忙解释一下原因吗?以及我如何解决它?

添加


我在另一个文件上遇到了其他错误:{error,bad_eocd}。请也解释一下。

【问题讨论】:

  • 在我之前遇到过某些 zip 文件无法通过 Erlangs zip 模块解压缩的情况。这取决于您的 zip 文件是如何创建的。但这可能会有所不同,但由于 zip 文件没有真正的标准,因此使用了各种变体。

标签: linux unix erlang zip gzip


【解决方案1】:

我无法使用您提供的信息重现您的问题。有 2 个函数可能会发送此错误:

stdlib-1.18.2/src/zip.erl 中的 get_cd_loop/5 和 get_name_extra_comment/4 。

应该很容易调试

将文件 zip.erl、zip.hrl、file.hrl 复制到工作目录中,

使用 debug_info 选项编译,您将收到错误消息“无法加载驻留在粘性目录中的模块”,请离开虚拟机

将 zip.beam 复制到 stdlib.../ebin

重启工作目录下的虚拟机,现在可以在zip.erl源码中添加断点了。

BR

帕斯卡。

【讨论】:

  • 在弄乱你的 Erlang 发行版之前,你应该用 -nostick 启动你的虚拟机,这样它就不会抱怨了。另外我建议在调试器中使用 dbg 跟踪而不是单步执行
  • 如果您需要覆盖代码中的粘性,您也可以在单个目录上调用 code:unstick_dir(Dir)。详情见erlang.org/doc/man/code.html
  • 我不知道这个选项。我会看看它是如何工作的。在我这边,我习惯保留官方的梁,一完成就恢复,不优雅但很简单,知道我的电脑不是生产机器。
  • 没错,压缩文件已损坏。当我尝试使用不同的un-zipper 时,它也会抛出异常。
猜你喜欢
  • 2022-12-19
  • 2014-07-10
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2012-12-18
  • 2021-09-27
  • 2015-04-24
  • 1970-01-01
相关资源
最近更新 更多