2015-09-17 4 views
2

Je dois copier un dossier d'un endroit à un autre tout en fournissant à mes utilisateurs une barre de progression .Comment copier un dossier, de manière récursive, avec retour d'information, tout en préservant toutes les métadonnées sur OS X?

La seule API appropriée que je peux trouver que n'est pas déconseillée est copyfile (3). J'ai implémenté ceci et les résultats sont presque parfaits, mais j'ai depuis découvert que ni les commentaires du Finder ni les tags associés à l'original ne sont copiés. Non seulement j'ai besoin d'être copié, mais je m'inquiète de savoir quelles autres métadonnées ne sont pas copiées et que je ne suis pas encore au courant.

Notez que je définis tous les indicateurs appropriés sur le fichier de copie à copier sur les métadonnées.

Comment puis-je atteindre mon objectif sans avoir recours à d'horribles techniques telles qu'un pont Applescript pour lire/écrire les commentaires en utilisant le Finder à la fin de la copie?

MISE À JOUR

Après beaucoup de recherches, j'ai découvert que les deux le commentaire et les balises sont copiés dans les attributs étendus du fichier. Cependant, le commentaire refuse d'afficher dans le Finder.

Je l'ai vu mentionné que le commentaire est également stocké dans le .DS_Store. Comme un test, j'ai supprimé le fichier .DS_Store, puis relancé le Finder afin qu'il serait régénéré. Le commentaire n'apparaît toujours pas.

Que doit-on faire pour que le Finder reconnaisse ces métadonnées?

+0

URL dupliquées de NSWorkspace? – Willeke

+0

Non, j'ai besoin de rappels de progression ... – tarmes

+0

Avez-vous vérifié si '- [NSFileManager copyItemAtURL: toURL: erreur:]' copie les commentaires et les balises? Si c'est le cas, vous pouvez construire une méthode autour de lui pour copier des hiérarchies de répertoires entiers de manière récursive. Vous utilisez un énumérateur de répertoires pour énumérer tous les fichiers et les copier un à la fois. Vous pouvez présenter les progrès à la granularité du fichier. Vous ne copiez pas les répertoires énumérés, vous créez un répertoire correspondant dans la destination, puis copiez-le. Vous devez faire attention à définir ses autorisations (et autres métadonnées) pour correspondre à l'original * après * la copie, si la source n'est pas inscriptible. –

Répondre

0

Remarque: cette réponse suppose que vous avez raison concernant les commentaires, etc., qui ne sont pas copiés, cela n'a pas été vérifié.

copyfile est disponible en source form from Apple. Vous pourriez avoir besoin de le modifier un peu pour le compiler. Une fois que vous avez fait cela, vous pouvez modifier pour ajouter les fonctionnalités que vous souhaitez.

HTH

+0

S'il vous plaît voir la mise à jour. – tarmes