控制zip存档中文件的排序顺序

时间:2010-01-04 08:00:17

标签: java php sorting unzip

描述

我有兴趣学习是否有任何方法可以使用PHP和/或Java中的标准例程来控制zip文件中文件的排序顺序。

我对使用shell_exec()或类似的使用zip / unzip并不感兴趣,但如果它提供易于阅读的解决方案,那么它会引起人们的兴趣。

使用排序顺序,如果zip文件中没有可用的排序顺序,则可以安全地假设它表示日期/时间。我没看过规格,所以我不知道。

实施例

文件

foo.txt的
跳回到bar.txt
test.txt的
newfile.txt

假设每个文件都包含文件名(foo.txt => foo.txt)

问题

我想在文件中附加一个排序顺序,这样当使用unzip解压缩时,文件会以正确的顺序排列。这很重要,为什么呢?因为我使用unzip -p来管道zip文件的内容。

将文件添加到存档的顺序无关紧要。

结果

预期结果(为了这个例子(使用unzip -p))

的test.txt
foo.txt的
newfile.txt
bar.txt

3 个答案:

答案 0 :(得分:4)

真的不是那么难。我看来文件索引与文件添加到存档的顺序有关,这控制了unzip -p的输出,因为它似乎以0..n方式迭代文件。

以下是如何创建满足条件的文件。 (好吧,因为我忘记了我的txt文件中的换行符)

$files = array(
    'test.txt',
    'foo.txt',
    'newfile.txt',
    'bar.txt'
);

$outfile = 'testout.zip';
if (file_exists($outfile)) {
    unlink($outfile);
}
$o = new ZipArchive();
$o->open($outfile,ZipArchive::CREATE);
foreach($files as $key => $file) {
    $o->addFile($file);
}

$o->close();

答案 1 :(得分:0)

您可以使用命令zipinfo(或unzip -Z)来显示存档中的文件。 man zipinfo也有关于如何对输出进行排序的示例,但如果您读入数组中的文件并对数组进行排序,它也可以在PHP中进行排序。

答案 2 :(得分:0)

解压缩文件(或文件系统上的任何文件)的排序顺序取决于用于查看文件的“客户端”。 * nix系统上的ls命令将显示按名称排序的文件作为默认值。如果您使用某种形式的文件管理器应用程序(或解压缩器),您将能够选择排序。存档上的预定义排序对我来说没有多大意义。