2011-05-29 3 views
4

Pour une application que je souhaite enregistrer une collection de fichiers ensemble, et les afficher dans le système de fichiers en un seul fichier de sorte que son facile à gérer. Je stocke actuellement tout dans un dossier.Création d'un ensemble de fichiers sur Mac OS X

Je voudrais garder les choses accessibles afin que vous puissiez modifier manuellement le contenu à l'intérieur si neccesary.

Une façon de le faire serait de créer une archive zip et lui donner une extension personnalisée autre que .zip. Ensuite, il apparaît comme un type de fichier et si nécessaire, vous pouvez décompresser et accéder au contenu, mais pour une utilisation normale gardez-le caché.

Je n'arrive pas à trouver un moyen pratique de le faire. Boost et zlib peuvent faire la compression mais ne fonctionnent pas avec les archives. J'ai trouvé libzip mais j'ai du mal à comprendre comment l'utiliser et il me semble qu'il ne lit/écrit que les archives zip sans faire la compression.

Existe-t-il un moyen plus pratique d'y remédier?

Pouvez-vous appeler des fonctions système pour créer une archive sur OSX de C++/carbone?

Existe-t-il une autre façon de faire apparaître un dossier en tant que fichier unique?

+0

Voulez-vous créer des archives .zip à partir de la ligne de commande ou d'un code que vous écrivez? –

+0

A partir du code (C/C++). Notez que je ne me soucie pas vraiment de la compression. Je veux juste que les fichiers deviennent des bundles et restent accessibles en même temps. –

Répondre

5

Sous OSX, vous pouvez créer Document Packages (similaire aux ensembles d'applications) qui sont traités comme un seul fichier dans le Finder, mais qui ne sont en réalité que des répertoires avec une structure interne.

Apple ne zippe pas ces packages, mais ils fournissent la fonctionnalité que vous décrivez et ils peuvent être créés et accessibles via CoreFoundation en utilisant CFBundleRef.

De la documentation:

... La chose importante à retenir sur la création d'un ensemble de documents est qu'il est tout simplement un répertoire. Tant que le type du paquet de documents est enregistré (comme décrit dans “Registering Your Document Type”), tout ce que vous avez à faire est de créer un répertoire avec l'extension de nom de fichier appropriée. (Le Finder utilise l'extension de nom de fichier pour traiter le répertoire comme un paquet.) Vous pouvez créer le répertoire (et créer les fichiers que vous voulez mettre dans ce répertoire) en utilisant les routines standard du système de fichiers BSD ...

+0

Merci. Cela semble être le chemin à parcourir. Ma première plate-forme cible est Mac, mais je préférerais une solution multi-plateforme. Des idées là-dessus? –

+0

Je n'ai aucune expérience sur aucune autre plate-forme, donc je ne serai pas beaucoup d'aide là-bas. Si l'objectif est multiplate-forme, une archive .zip * serait * le meilleur choix. Soit cela, ou écrire votre propre format de fichier binaire. –

+0

Nice. Je ne savais pas à ce sujet. –

2

Comme première étape, renommez simplement le dossier et ajoutez l'extension .bundle, par ex. Myappdir.bundle

C'est montrera tout le dossier en un seul fichier avec une icône de paquet comme lego.

L'étape suivante est que vous devez créer un fichier Info.plist à l'intérieur.