La implementación de un sistema de archivos virtual es muy operativo específico. La razón es que la arquitectura de los controladores es diferente en el sistema operativo tipo Unix y en Windows.
Para evitar escribir su propio controlador, puede utilizar el kit de herramientas del sistema de archivos en modo de usuario. En Linux, BSD y MacOS existen FUSE y OSXFUSE (fork de MacFUSE ahora inactivo) respectivamente. En Windows, se usa nuestro Callback File System.
Dropbox por el momento no tiene un sistema de archivos virtual, pero solo la extensión del shell (afaik planearon crear un disco virtual, pero no sé lo que han decidido).
Respecto a cómo se rastrean los cambios de archivos: existen varios métodos. Lo más simple es escanear el directorio en el temporizador y comparar las marcas de tiempo y los tamaños de archivo. A continuación, uno puede usar la función WinAPI FindFirstChangeNotification. Y el método más sofisticado y más confiable es usar un controlador de filtro del sistema de archivos. En Windows, puede usarse nuestro CallbackFilter. En MacOS X y Linux, puede recibir notificaciones posteriores similares a las que FileSystemWatcher ofrece en .NET/Windows. En particular, en Linux, uno puede usar inotify.
El cliente de Dropbox en realidad no implementar un sistema de archivos, simplemente inspecciona y actualizaciones de archivos existentes. FUSE hace algo muy diferente. –
En general, la máxima reutilización del código se logra mejor a través de una arquitectura bien pensada y la generalización del problema. Y, por supuesto, la selección de un lenguaje/marco de programación en caso de desarrollo multiplataforma. –
En el caso de dropbox ... En general, ¿cómo están detectando que un archivo ha sido modificado? Realmente no quiero entrar en detalles de su tecnología, pero tengo curiosidad si simplemente están haciendo algo ingenuo, como escanear archivos para la marca de tiempo modificada o algo más sofisticado, como la implementación de algún tipo de notificación/devolución de llamada cuando un archivo es modificado. El último caso sería más interesante y me gustaría saber si es posible incluso en una plataforma determinada. – mcot