Estoy intentando usar FSEvents para detectar cuándo se agregaron/eliminaron archivos de una carpeta específica. Por el momento, implementé un contenedor simple alrededor de FSEvents, y funciona bien: recibo todos los eventos.archivo de seguimiento cambio de nombre/eliminación con FSEvents en Lion
PERO el problema que tengo ahora es que cuando cambio el nombre de un archivo en el Finder, capturo 2 eventos distintos: el primero de tipo "renombrado" con el nombre del archivo anterior, y otro con "renombrado" y el nuevo nombre de archivo. Los identificadores de eventos son diferentes entre ambas llamadas.
Entonces, ¿cómo se supone que voy a saber qué evento "renombrado" contiene el nombre anterior, y qué evento contiene el anterior? Intenté buscar en la documentación, pero desafortunadamente, kFSEventStreamEventFlagItemRenamed no está documentado ... parece nuevo en Lion.
PD: la única forma en que podía pensar era: en un evento con otro nombre, reviso mi UI para ver si tengo un elemento correspondiente a la ruta del evento. Si es así, lo señalo para cambiar el nombre. De lo contrario, verifico si un elemento fue marcado para cambiar el nombre, y si es así, entonces le cambio el nombre a la nueva ruta del evento. Pero realmente no me gusta esta idea ...
Edit: Ok, tuve algo en la línea de mi "PS": me di cuenta de que al cambiar el nombre de algo, los identificadores de los 2 eventos son consecutivos, por lo que con el id del evento que contiene el nuevo nombre, puedo obtener el evento que contiene el nombre anterior. Simplemente utilizo un pequeño dictionario en mi interfaz para almacenar identificadores y rutas asociadas en el caso de un evento "renombrado".
De todos modos, ahora puedo coger cambiar el nombre de eventos, e incluso mover eventos: cuando mueva un archivo, se trata de un evento "renombrado", que se encuentra atrapado por el FSEventStream ...
Pero, todavía tengo una última problema: eliminar Cuando elimino algo, se mueve a la papelera de reciclaje: recibo un evento "renombrado". Pero el problema es que no recibo el segundo evento de cambio de nombre. Solo un evento "modificado" en el archivo .DS_Store. Creo que el Finder usa este archivo para saber qué archivos están en el contenedor, etc. Así que pude verificar la modificación de este archivo y obtener el último evento "redenominado" para detectar que se envió un archivo al contenedor. Pero estoy usando TotalFinder que usa Asepsis, que modifica la forma en que el Buscador almacena archivos .DS_Store: ya no recibo "modificado" en esto. Para sumarizar: No puedo detectar cuando se envía un archivo al contenedor ...
¿Alguna idea de cómo puedo hacer eso? ¿Tal vez usar algo más que FSEvents para atrapar solo este evento?
muy útil, gracias por su código :) –
en su sitio no hay ningún botón de enviar en la página de contacto, denme su correo electrónico por favor, quiero hacerle algunas preguntas. Gracias :) –
He arreglado el formulario de contacto en mi sitio. No sé cómo enviar un mensaje privado en StackOverflow (o incluso si es posible ^^) – Citron