dropbox(http://www.dropbox.com/)和expandrive(http://www.expandrive.com/mac)等应用程序使用哪些技术在每个平台上的本地文件系统中构建功能?任何人都可以提出任何可以在所有主要平台上重复使用代码的建议吗?
到目前为止,我只在linux上查看了FUSE,我喜欢我所看到的。
答案 0 :(得分:5)
实现虚拟文件系统非常特定于操作系统。原因是驱动程序的体系结构在类Unix操作系统和Windows中是不同的。
为避免编写自己的驱动程序,可以使用用户模式文件系统工具包。在Linux,BSD和MacOS上分别存在FUSE和OSXFUSE(现在不活动的MacFUSE的分支)。在Windows上,我们使用了Callback File System。
目前Dropbox没有虚拟文件系统,只有shell扩展(他们计划创建一个虚拟磁盘,但我不知道他们已经决定了什么)。关于如何跟踪文件更改:存在多种方法。最简单的方法是在计时器上扫描目录并比较时间戳和文件大小。接下来,可以使用FindFirstChangeNotification WinAPI函数。最复杂,最可靠的方法是使用文件系统过滤器驱动程序。在Windows上,我们可以使用CallbackFilter。在MacOS X和Linux上,您可以获得类似于FileSystemWatcher在.NET / Windows中提供的后通知。特别是在Linux上,可以使用inotify。
答案 1 :(得分:4)
你所追求的是usrspace文件系统。我不知道是否有一个统一的解决方案可以在所有(或大多数)平台上实现用户空间文件系统(可能不是),但这是一个起点:
我不熟悉所有这些,所以我不知道代理/接口代码是多么容易,因此您可以以独立于平台的方式无缝地实现文件系统。无论如何,文件系统应该支持的操作(在某种程度上)对每个人来说都是相同的(打开,读取,写入等),所以乍一看这似乎是一个简单的开始(即使使用C预处理技术编码,虽然你可能想看看C ++ boost库,它们应该是高度独立于平台的,并提供一些很好的平台独立开发工具。)
祝你好运!答案 2 :(得分:1)
我遇到了类似的问题:开发“跨平台”文件系统。
答案 3 :(得分:0)
在Windows上监听文件更改非常容易: http://msdn.microsoft.com/en-us/library/atwhk15d(v=vs.80).aspx
答案 4 :(得分:0)
这是Mac OS FUSE实施的一个示例: http://www.macupdate.com/app/mac/23729/macfuse