0

好的,所以基本上我正在尝试在 python 中编写简单的快速脚本来从 *.fla (flash) 文件中搜索 xml。我所做的只是通过 zipfile.ZipFile 从项目中打开 *.fla 文件,浏览此 zip 存档中的所有文件,并通过正则表达式搜索特定术语(脏且简单)。这不是解决我的问题的理想解决方案,但现在可以使用。我正在使用 CS6,并且我知道 CS5 及更高版本的 *.fla 文件基本上是带有 xml(和其他文件)的 zip 存档,并且我已经通过 Windows 上的 7zip 成功提取了这些文件。但不知何故,在我项目的一半文件中,zipfile.ZipFile 在创建时抛出异常“中央目录的魔数错误”。调用堆栈如下所示:

  File "fla_search.py", line 92, in try_search_zip                                                                                                            
    with zipfile.ZipFile(fla_path, compression=compression) as zip_view:                                                                                                        
  File "C:\bwn_programs\python\lib\zipfile.py", line 1257, in __init__                                                                                                     
    self._RealGetContents()                                                                                                    
  File "C:\bwn_programs\python\lib\zipfile.py", line 1352, in _RealGetContents                                                                                                
    raise BadZipFile("Bad magic number for central directory")

我还检查了错误文件的标头幻数(以防万一),它似乎实际上对应于实际的 zip 存档:

在此处输入图像描述

在此处输入图像描述

(是的,文件的所有内容都通过 7zip 成功打开)

那么,可能是什么问题?

4

1 回答 1

0

您的十六进制转储显示文件的开头,前 4 个字节确实是有效的本地标头签名。问题是 python 代码抱怨中央目录标题 - 这是接近文件末尾的。

一些使用 zip 作为其容器格式的程序会做一些非标准的事情。这意味着这些文件不再是真正的 zip 文件。7zip 和 unzip 之类的软件很聪明,可以解决其中的一些问题,但不是全部。

如果您unzip的 Windows 设置可用,请尝试运行unzip -t yourfile.fla以测试fla文件 - 这可能会提供有关文件构建方式问题的更多线索。

是否有任何fla可用的公共文件存在此问题?这将使我们更容易帮助解决问题的根本原因。

于 2022-01-13T08:28:16.703 回答