Editar: OK. A questão do aviso foi atualizada, portanto, você não recebe a v0.1, mas a v1.0. não se aplica mais.
A versão não é "qual a capacidade" do arquivo, mas a versão mínima é necessária para extrair esse arquivo do arquivo.
Isto não é a versão geral do arquivo!
Uma diferença aqui é que, por exemplo OO marca os arquivos all com o mesmo requisito de versão. Esse, por sua vez, é o arquivo no documento (arquivo acima de tudo) com os mais altos requisitos.
Isso é. Cada arquivo tem um cabeçalho zip que especifica a versão mínima necessária para extraí-lo. Pelo acima, temos tipicamente:
archive-files PackType Zip-Required OO-Header 'zip'-header
+--------------------------------------------------------------+
| mimetype Store 1.0 2.0 1.0 |__ foo.odt
| content.xml Deflate 2.0 2.0 2.0 |
+---------------------------------------------------------------+
Assim, o OO define o sinalizador requerido como 2.0, mesmo sendo 1.0. No entanto, isso não afeta a capacidade de abrir o documento. (Não há problema em abrir um arquivo zip'ed manualmente no OO, mesmo que mimetype
esteja marcado com v1.0).
Versões
foo.odt:
1400 Version needed to extract.
0008 General Purpose
0000 Compression method
Versão necessária para extrair , aqui o byte mais baixo, 0x14
, é traduzido dividindo e módulo por 10:
Major: 0x14 / 0x0a = 2
Minor: 0x14 % 0x0a = 0
Versão Aka 2.0
O byte superior 0x00
indica com o que o arquivo é compatível. Se zero, então é compatível com o MS-DOS (FAT, FAT32, VFAT). Além disso, é especificado por um mapeamento. Por exemplo. se eu usar zip
sem opções no meu sistema, recebo um 0x03
que indica Unix. 0x0a
é NTFS, etc.
A versão 2.0 indica: (4.4.3.2 Versões mínimas atuais do recurso)
* File is a folder (directory)
* File is compressed using Deflate compression
* File is encrypted using traditional PKWARE encryption
No arquivo zip'ed você tem:
bar.odt:
0a00 Version needed to extract.
0000 General Purpose
0000 Compression method
Major: 0x0a / 0x0a = 1
Minor: 0x0a % 0x0a = 0
Aka versão 1.0
A versão 1.0 é simplesmente o valor padrão.
Hierarquia de arquivos e versão mínima
O motivo pelo qual você vê a versão 1.0
em Versão necessária para extrair - é que o que você realmente vê é o cabeçalho zip do arquivo mimetype
. Este arquivo não é esvaziado, mas armazenado com a compactação no . Assim, você só precisa da versão 1.0
para extrair esse arquivo. Isso, no entanto, não é a versão geral do arquivo. Se você olhar mais para baixo, encontrará a versão 2.0 assim que encontrar um arquivo salvo com deflação. Você pode verificar, por exemplo:
hexdump -v -e '/1 "%02x "' bar.odt | grep -o '50 4b 03 04 .\{6\}'
Deve fornecer algo como
50 4b 03 04 0a 00
50 4b 03 04 0a 00
...
50 4b 03 04 14 00
50 4b 03 04 14 00
50 4b 03 04 0a 00
50 4b 03 04 14 00
...
Cabeçalho do arquivo do diretório central
Existem alguns arquivos com um cabeçalho estendido. Você pode listá-los por:
hexdump -v -e '/1 "%02x "' foo.odt | grep -o '50 4b 01 02.\{16\}'
(Lembre-se de inverter 50 4b ...
para 02 01 4b 50
se hexdump -n 4 foo.odt diga isso)
Por isso você vai ter tipicamente:
____________ Version required (2.0)
| |
50 4b 01 02 14 00 14 00 00
50 4b 01 02 14 00 14 00 00
50 4b 01 02 14 00 14 00 08
|___|
|
+-------------- Version supported by packing application. v2.0
No arquivo zip
criado, você pode obter, por exemplo:
____________ Version required for this file (2.0)
| |
50 4b 01 02 1e 03 14 00 00
|___|
|
+-------------- Version supported by packing
application. v3.0
Propósito geral (e outro sinalizador definido em arquivos odt)
Este é um flag de bit. Como seu arquivo é big-endian / Motorola, a bandeira se torna:
0x0800 = 0000 1000 0000 0000
|
+---------------- 11 => File names and comments MUST be
stored as Utf-8.
Pelo menos o LibreOffice economiza ainda mais com vários mods.
mimetype
é sempre o primeiro e não deve ser compactado. Isso é para ajudar vários softwares a identificar o arquivo e seu conteúdo. Por este pode, por exemplo:
$ hexdump -C -s 38 -n 39 foo.odt
00000026 61 70 70 6c 69 63 61 74 69 6f 6e 2f 76 6e 64 2e |application/vnd.|
00000036 6f 61 73 69 73 2e 6f 70 65 6e 64 6f 63 75 6d 65 |oasis.opendocume|
00000046 6e 74 2e 74 65 78 74 |nt.text|
Enquanto zip
normalmente salva todos os diretórios, o OO salva apenas um diretório se estiver vazio. Assim:
zip:
Thumbnails/
Thumbnails/thumbnail.png
META-INF/
META-INF/manifest.xml
oo:
Thumbnails/thumbnail.png
META-INF/manifest.xml
E assim por diante ...