【问题标题】:line break issue caused file corruption换行问题导致文件损坏
【发布时间】:2015-06-25 14:13:26
【问题描述】:

我使用 perl 脚本中的 getstore() 函数从服务器下载了一个 zip 文件,并使用 Unzip 方法解压缩了该文件。现在,如果我尝试访问该文件,我会看到以下错误。

错误:XXX 文件已损坏,已找到 CR。可能的原因是文件行结尾 从Unix翻译成CR+LF格式

当我通过单击超链接手动下载文件并使用 Windows 提取方法解压缩文件时,没有出现此类错误。有人可以解释为什么会发生吗?无论如何我们可以使用某些工具/应用程序访问损坏的文件吗?

【问题讨论】:

  • 需要更多细节来说明你在做什么。
  • 在自动化中,我们尝试使用 perl 脚本从服务器下载多个覆盖文件。特别是通过传递 url 和文件名使用 getstore() 函数(通过 LWP::simple API 公开)。现在,当我将下载的文件提供给某个应用程序时。然后应用程序报告上述错误。如果我手动下载文件并将其提供给应用程序,那么我们看不到上述错误。
  • 请参阅How to Ask 了解有关什么是好的(更重要的是,可回答的)问题的详细信息。
  • 刚刚更新了我的评论,如果你能理解的话。
  • 理想情况下,您将实际编辑与您的问题相关的内容到您的问题中。但是,这些信息仍然不够充分 - 通常示例代码是一个好的开始,否则足以重现错误。

标签: windows perl file-io line-breaks


【解决方案1】:

LWP::Simple 的 getstore 将收到的内容准确写入磁盘。

“损坏”文件的是您的浏览器。如果您希望执行与 Web 浏览器相同的“损坏”,即如果您希望将 DOS 行尾转换为 unix 行尾,您可以使用命令行实用程序 dos2unix

或者您可以修改您的 Perl 脚本以获取不存储、转换行尾并存储转换后的结果。

【讨论】:

  • 正确,同意你的看法。 getstore 不会更改文件。具体来说,我正在使用 getstore() 方法下载 zip 文件。并使用 unzip 方法解压缩文件使用 IO::Uncompress::Unzip qw(unzip $UnzipError);解压缩 $covZip => $covFile 或死“解压缩失败:$UnzipError\n”; //根本原因如果我使用上述方法解压缩文件或使用 Windows 提取方法解压缩文件,我们将得到两个不同的文件。 dos2unix 实用程序修复了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
相关资源
最近更新 更多