4 votes

Pourquoi le changement de l'option "Ouvrir avec" modifie-t-il également la date de modification d'un fichier ?

J'ai remarqué quelque chose il y a quelque temps. J'utilise Carbon Copy Cloner pour sauvegarder mes fichiers et j'ai remarqué un jour que lorsque j'ai changé l'indicateur "Ouvrir avec" d'une vidéo pour toujours ouvrir un fichier vidéo avec Movist au lieu de Quicktime, et la fois suivante où le clone s'est exécuté, il a copié le fichier à nouveau. Même si rien n'avait été changé. Ce qui m'a fait réaliser qu'OS X modifie la date de modification d'un fichier, ce qui amène les programmes de sauvegarde comme Rsync (que CCC et SuperDuper utilisent) et Time Machine à recopier le fichier, même s'il fait 10 Go.

Pourquoi fait-il cela ? Y a-t-il une raison technique ou s'agit-il d'un oubli ? Cela me semble être une idée stupide. D'autant plus que le changement d'une étiquette ne modifie pas le fichier et que la sélection de couleur est dupliquée sans que le fichier entier soit copié.

5voto

DShook Points 5361

Une certaine expérimentation en utilisant le xattr montre ceci :

  • Les informations relatives aux étiquettes sont stockées dans le com.apple.FinderInfo que chaque fichier devrait avoir par défaut.
  • Les associations d'applications personnalisées sont stockées dans le fichier com.apple.ResourceFork que tous les fichiers ne possèdent pas.
  • Mise à jour de la FinderInfo n'entraîne pas la modification de la date de modification.
  • Création/mise à jour du ResourceFork entraîne la modification de la date de modification.

La fourche de ressources a historiquement eu une place spéciale dans les systèmes de fichiers Mac. Je ne suis pas sûr que la com.apple.ResourceFork attribut étendu est la même chose qu'un fourchette de ressources si la seconde a été remplacée par la première ou comment elles sont liées.

S'il y a une différence technique entre un attribut étendu et un fourchette de ressources il peut être "nécessaire" qu'un fichier soit modifié lorsque la fourchette de ressources est mise à jour, mais pas lorsque l'attribut étendu est écrit.
Il se peut que l'API (ancienne) de mise à jour des fourches de ressources mette à jour la date de modification du fichier au cours du processus, alors que l'API d'attribut étendu ne le fait pas. Il est possible que cette dernière soit une erreur, ou que cela soit dû à des philosophies différentes.

Une information vague, mais qui pourrait donner un peu plus d'informations. En fin de compte, vous avez raison. Certaines modifications de méta-informations entraînent la mise à jour de la date de modification, d'autres non. S'il y a une raison derrière cela ou si c'est juste un oubli seuls quelques gars chez Apple peuvent le savoir. :)

2voto

Tom Points 1115

Lorsque vous sélectionnez un fichier unique, que vous ouvrez une fenêtre Get Info et que vous choisissez une application différente de celle par défaut, cette liaison des services de lancement est enregistrée dans la fourche de ressources du fichier lui-même, dans un fichier de type 'usro' (User Override). Pour autant que je sache, le format de cette ressource est privé, déterminé par Apple, et est susceptible d'être modifié. (Les caractères tout en minuscules dans le nom OSType fournissent un indice, puisque Apple réserve les types de fichiers, les codes de créateurs et les types de ressources avec tous les caractères minuscules. Par exemple, 'icns' (Icon Suite) type de ressource, 'ttxt' (à l'origine de Teach Text, mais qui est maintenant le code créateur (CFBundleSignature) de TextEdit.app), etc.)

Cette ressource est créée à l'aide des fonctions du gestionnaire de ressources pour modifier le fork du fichier, ce qui met à jour la date de modification du fichier.

Un exemple de fichier sur lequel je viens d'essayer cette procédure est montré dans l'image ci-dessous, ouvert dans Resorcerer. (Note spéciale : vous remarquerez dans la colonne de gauche qu'il y a 2 types listés : 'TEXT' y 'usro' . Il n'y a en fait qu'un seul 'usro' l'entrée ; Resorcerer montre qu'il y a une 'TEXT' parce qu'il remarque que le contenu de la fourchette de données du fichier est basé sur du texte (un fichier d'en-tête de code source), et y fournit donc un accès pratique). La deuxième image montre le contenu de cette ressource, qui contient essentiellement un chemin vers l'application cible que j'ai choisie.

alt textalt text

Puisque cette 'usro' La ressource User Override est enregistrée dans le fichier lui-même, ce qui explique pourquoi la ressource Guide de programmation des services de lancement : Choix de la préférence de reliure pour un fichier revendique ce qui suit :

Remarque : les préférences de liaison explicites pour les éléments individuels ne sont pas spécifiques à l'utilisateur mais à l'ensemble du système, c'est-à-dire qu'elles continuent de s'appliquer à l'élément donné sur le même ordinateur, même si un autre utilisateur se connecte.

Maintenant, pour aller un peu plus loin. Si vous cliquez maintenant sur le bouton Change All pour que cela soit une dérogation globale, les services de lancement supprimeront le bouton 'usro' et crée à la place une liaison globale qui est stockée dans le fichier com.apple.LaunchServices.plist (préférences par utilisateur). La suppression du fichier 'usro' L'entrée est effectuée en utilisant les fonctions du gestionnaire de ressources, qui met à jour la date de modification du fichier. Notez que, bien que cela supprime l'élément 'usro' il ne peut pas supprimer la fourche entière de la ressource. Dans la plupart des cas, 286 octets resteront dans la fourche de ressources, ce qui correspond à l'espace minimum occupé par l'en-tête et la carte de ressources.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X