4 votos

¿Por qué al cambiar "Abrir con" también cambia la "Fecha de modificación" de un archivo?

Algo de lo que me di cuenta hace un tiempo. Utilizo Carbon Copy Cloner para hacer copias de seguridad de mis archivos y me di cuenta un día cuando cambié la bandera de "Abrir con" de un vídeo para abrir siempre un archivo de vídeo con Movist en lugar de Quicktime, y la siguiente vez que el clon se ejecutó copió el archivo de nuevo. A pesar de que no se había cambiado nada. Lo que me hizo darme cuenta de que OS X cambia la fecha de modificación de un archivo haciendo que los programas de copia de seguridad como Rsync (que CCC y SuperDuper utilizan) y Time Machine vuelvan a copiar el archivo, incluso si es de 10GB de tamaño.

¿Por qué hace esto? ¿Hay alguna razón técnica o es un descuido? A mí me parece una idea tonta. Sobre todo porque al cambiar una etiqueta no se modifica el archivo y la selección de colores se duplica sin que se copie todo el archivo.

5voto

DShook Puntos 5361

Algunos experimentos con el xattr muestra esto:

  • La información de la etiqueta se almacena en el com.apple.FinderInfo que todos los archivos deberían tener por defecto.
  • Las asociaciones de aplicaciones personalizadas se almacenan en el com.apple.ResourceFork que no todos los archivos tienen.
  • Actualización de la FinderInfo no hace que se modifique la fecha de modificación.
  • Creación/actualización del ResourceFork hace que se modifique la fecha de modificación.

La bifurcación de recursos ha tenido históricamente un lugar especial en los sistemas de archivos de Mac. No estoy seguro de si el com.apple.ResourceFork atributo extendido es lo mismo que un horquilla de recursos si esta última fue sustituida por la primera o de qué otra forma están conectadas.

Si hay una diferencia técnica entre un atributo extendido y un horquilla de recursos En este caso, puede ser "necesario" que un archivo se modifique cuando se actualice la horquilla de recursos, pero no cuando se escriba el atributo extendido.
Puede ser que la API (heredada) para actualizar las bifurcaciones de recursos actualice la fecha de modificación del archivo en el proceso, mientras que la API de atributos extendidos no lo hace. Esto último posiblemente sea un error, posiblemente debido a las diferentes filosofías.

Una información vaga, pero que puede dar un poco más de luz. Sin embargo, al final tienes razón. Algunas modificaciones de la meta información hacen que se actualice la fecha de modificación, otras no. Si hay una razón detrás de esto o si es sólo un descuido sólo algunos tipos en Apple pueden saber. :)

2voto

Clay Nichols Puntos 569

Cuando se selecciona un único archivo, se abre una ventana de obtención de información y se elige una aplicación diferente, no predeterminada, este enlace de servicios de lanzamiento se guarda en el tenedor de recursos del propio archivo, en un 'usro' (User Override). Hasta donde yo sé, el formato de este recurso es privado, determinado por Apple, y está sujeto a cambios. (Los caracteres en minúscula en el nombre OSType proporcionan una pista, ya que Apple reserva los tipos de archivo, códigos de creador y tipos de recursos con todos los caracteres en minúscula. Por ejemplo, 'icns' (Icon Suite) tipo de recurso, 'ttxt' (originalmente de Teach Text, pero ahora es el código creador (CFBundleSignature) de TextEdit.app), etc.).

Este recurso se crea utilizando las funciones del gestor de recursos para modificar la horquilla del archivo, que a su vez actualiza la fecha de modificación del archivo.

En la siguiente imagen se muestra un archivo de ejemplo con el que acabo de probar este procedimiento, abierto en Resorcerer. (Nota especial: se dará cuenta de que en la columna de la izquierda hay 2 tipos listados: 'TEXT' y 'usro' . De hecho, sólo hay una 'usro' entrada; Resorcerer está mostrando que hay una 'TEXT' porque se da cuenta de que el contenido en el tenedor de datos del archivo está basado en texto (un archivo de cabecera de código fuente), y por lo tanto está proporcionando un acceso conveniente a él). La segunda imagen muestra el contenido de este recurso, que básicamente contiene una ruta a la aplicación de destino que elegí.

alt text alt text

Desde este 'usro' El recurso User Override se guarda como parte del propio archivo, lo que explica por qué el Guía de programación de los servicios de lanzamiento: Elección de la preferencia de enlace para un archivo reclama lo siguiente:

Nota: Las preferencias de vinculación explícitas para elementos individuales no son específicas del usuario, sino de todo el sistema, es decir, siguen aplicándose al elemento en cuestión en el mismo ordenador, incluso si un usuario diferente se conecta.

Ahora, para ir un paso más allá. Si ahora hace clic en el botón Change All para convertirlo en una anulación global, Launch Services eliminará el 'usro' y en su lugar crear un enlace global que se almacena en el archivo com.apple.LaunchServices.plist (preferencias por usuario). Al eliminar el archivo 'usro' se realiza mediante las funciones del gestor de recursos, que actualizará la fecha de modificación del archivo. Tenga en cuenta que, aunque elimina el 'usro' recurso, no puede eliminar todo el tenedor de recursos. En la mayoría de los casos, quedarán 286 bytes en el fork de recursos, que es básicamente la cantidad mínima de espacio que ocupan la cabecera y el mapa de recursos.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X