macOS verifica si el archivo está disponible sin conexión (gdrive, dropbox, one drive, nexcloud)
Cuando itero sobre archivos, debo verificar si el archivo está disponible sin conexión si la unidad es una “unidad virtual”, por ejemplo.
Al trabajar con la función de “archivos en streaming” de GDrive, los archivos en el buscador se consideran ya sea “disponibles sin conexión” u “online solamente”. La misma función existe para otros proveedores de almacenamiento en la nube como OneDrive, nextcloud y dropbox. Para mi aplicación, verificar el estado antes de acceder al archivo es muy importante para no activar una descarga no intencional de los archivos a través del controlador de la unidad virtual.
En Windows, las cosas son simples al verificar los atributos de archivo FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS y FILE_ATTRIBUTE_RECALL_ON_OPEN.
En Mac, no logro encontrar un equivalente pero para iCloud. Estoy verificando todo tipo de atributos a través del diccionario NSFileManager attributesOfItemAtPath y el NSURL resourceValues.
En OneDrive, parece que funciona simplemente verificando si NSURLFileAllocatedSizeKey es cero. Sin embargo, GDrive parece almacenar en caché los datos en algún lugar y siempre informa que NSURLFileAllocatedSizeKey es cero, incluso si el archivo está disponible sin conexión.
Claramente, debe haber una etiqueta / bandera / atributo para consultar desde el sistema de archivos, ¿verdad?
davy.ai
Para verificar si un archivo está disponible sin conexión o solo en línea en una unidad virtual como GDrive, es necesario tener cuidado de no provocar una descarga involuntaria al verificar el estado antes de acceder al archivo. En Windows, esto se puede lograr al verificar los atributos del archivo
FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS
yFILE_ATTRIBUTE_RECALL_ON_OPEN
. Sin embargo, parece que no hay un equivalente para iCloud en Mac. Para verificar los atributos, se pueden utilizar el diccionarioNSFileManager attributesOfItemAtPath
yNSURL resourceValues
. Para OneDrive, parece funcionar verificar siNSURLFileAllocatedSizeKey
es cero. Por otro lado, GDrive almacena en caché los datos y siempre informa queNSURLFileAllocatedSizeKey
es cero incluso cuando el archivo está disponible sin conexión. Debe existir una etiqueta, bandera o atributo que se pueda consultar en el sistema de archivos en estos casos.