Le format TAR

Le format TAR

Pourquoi je l’utilise? Car c’est un format libre, ce qui garantit l’interopérabilité. Cela est important car cela me permet d’avoir toujours un logiciel pour faire et lire l’archive, sans license ou redevance. Cela permet d’encoder un tar sous Windows, Linux, Mac. Le faire ma propre lib pour le lire (donc réduire la taille du code car je limite les fonctionnalités à ce que j’ai besoin).

Tar and gzip
Tar and gzip

Cela me permet de découplé le format de stockage et la compression en elle même. Utiliser le format Tar avec gzip, zlib ou autre.

Comment est fait un Tar?

Vous avez les données, le contenu des fichiers. Et les métadonnées, nom, chemin, chmod, utilisateur, groupe, date de creation… Le format Tar tar fonctionne par bloque, les trous entre les bloques sont remplit par des 0 binaires. Le format est orienté stockage sur bande, il date de 1979 (normalisation 1988) mais eu des revisions entre temps.

Le fait de ne pas faire une bête sérialisation peu être gênant pour les systèmes de compression car il y as un trou de X 0 binaire. Cela rajoute du bruit, ce qui est problématique pour optimiser la compression. Si en plus l’on rajoute le faite que les entier sont stocké en chaine, ce qui réduit encore le ratio de compression comparé au binaire (voir: Compression et Binary dans le wiki de CatchChallenger). Cela réduit aussi les performances de l’encodeur et décodeur Tar de travailler en chaine et non pas en binaire (sans parler des limitations de la longueur des nombres représentés).

Un format mieux étudié pourrai avoir une taille bien inférieur sans compression et un meilleur ratio de compression.

Supprimer des meta données serai une bonne idée. Par exemple dans mon décompresseur je ne prends en compte QUE le fichier et son nom et j’ignore une grande partie et méta données: chmod, utilisateur, groupe, date de creation…

Conclusion

Je vais continuer à utiliser Tar dans le cadre de mes logiciels pour faciliter la création de plugin pour Ultracopier/Supercopier et pour l’intégration facile coté serveur dédié (99% de unix) pour CatchChallenger via un mirroir http (car pour le self hosting il y as déjà un rsync simplifié qui rends toute utilisation de Tar inutile).

Faire mon propre format n’est pas un probléme, le probléme serai de faire/maintenir et distribuer l’encodeur et le décodeur pour ce format.

Lib Qt xz (basé sur lzma2) + tar, en décompression seulement (minimisé)

Bonjour, voila un mini projet qui fait wrapper entre xz et Qt avec un petit bout de code pour décompresser les archives .tar.xz avec/sans crc32 (voir QXzDecode.h). Support en QDataStream ou QByteArray.
Il permet d’avoir un décompresseur minimum, sachant que xz ce base sur lzma2, le format est trés performant.
Dans mon cas ça me sert pour faire un plugin étant en réalité une archive multi-fichiers.
Dans l’avenir je referai tout en Qt pour compresser et optimiser le code.
Lien:

Lib qt pour la lecture du lzma et du tar

Bonjour, je viens enfin de finir mal lib pour la lecture du lzma et du tar, les 2 peu étre lu indépendamment, il y a un minimum de contrôle d’erreur, tout est minimisé pour prendre le moins de place possible et pour étre le plus claire possible, pour rester au maximum multiplateforme et léger cette limitation sont en place, par exemple seul les fichiers dans les archives tar sont supporté.

Cela vas me permettre de commencer à supporter un certain nombre de chose sous ultracopier, comme l’importation des ressources. Bien sur après avec fixer le dernier bug de la version actuelle.

Tout est commenté pour que des développeurs c++ puis comprendre l’algorithme.

Lien:

http://files.first-world.info/qt-project/lzma-decode-qt-src.tar.bz2