2011-01-29 112 views
12

Dropbox(http://www.dropbox.com/)和expandrive(http://www.expandrive.com/mac)等应用程序使用什么技术在每个平台上的本地文件系统中构建功能?任何人都可以提出任何可以在所有主要平台上重复使用代码的任何内容吗?为linux,mac,windows开发“文件系统”

我只在Linux上看过FUSE到目前为止,我喜欢我所看到的。

+3

投寄箱客户端不实际实现的文件系统,它只是检查和更新现有的文件。 FUSE做了非常不同的事情。 – 2011-01-29 16:05:33

+0

一般来说,最好的代码重用最好通过考虑周全的架构和问题来实现。而且,当然,在多平台开发的情况下选择编程语言/框架。 – 2011-01-29 16:09:20

+0

在保管箱的情况下......一般来说他们如何检测文件已被修改?我真的不想进入他们的技术细节,但我很好奇他们是否只是在做一些天真的事情,比如扫描修改过的时间戳的文件,或者更复杂的东西,比如当文件是实现某种通知/回调时改性。后一种情况会更有趣,我想知道它是否可以在任何特定平台上使用。 – mcot 2011-01-29 16:14:06

回答

5

实现一个虚拟文件系统是非常特定于OS。原因是驱动程序的体系结构在类Unix操作系统和Windows中不同。

为避免编写自己的驱动程序,可以使用用户模式文件系统工具包。在Linux,BSD和MacOS上分别存在FUSE和OSXFUSE(现在非活动的MacFUSE的分支)。在Windows上,我们使用了Callback File System

Dropbox目前没有虚拟文件系统,但只有外壳扩展(afaik他们计划创建一个虚拟磁盘,但我不知道他们已经决定)。

关于文件更改的跟踪方式:有几种方法。最简单的方法是扫描定时器上的目录并比较时间戳和文件大小。接下来,可以使用FindFirstChangeNotification WinAPI函数。最复杂和最可靠的方法是使用文件系统过滤器驱动程序。在Windows上,我们可以使用CallbackFilter。在MacOS X和Linux上,您可以获得类似于FileSystemWatcher在.NET/Windows中提供的后通知。特别是在Linux上,可以使用inotify

3

你在做什么是usrspace文件系统。我不知道是否有适用于在所有实现用户空间文件系统的统一解决方案(或最全的)平台(可能不是),但这里有一个出发点:

  • Linux和(我认为只有一些) Unix系统:fusefs
  • 对于Windows:dokan
  • 为Mac OS:macfuse

我不熟悉所有的人,所以我不知道是多么容易编写代理/接口,这样你就可以无缝地在平台独立中实现文件系统ndent的态度。无论如何,文件系统应该支持的操作(在某种程度上)对于每个人来说都是相同的(开放,读取,写入等),所以乍一看这似乎是一个简单的开始(即使用C预处理技术编码,虽然你可能想看看C++ boost库,它们应该是高度平台独立的,并提供一些很好的平台独立开发工具)。

祝你好运!

1

我遇到过类似的问题:开发“跨平台”文件系统。

  1. 如果你要开发一个本地文件系统,你能做的最好的就是尝试尽可能多的隔离为您的文件系统的算法(计算磁盘布局,校验和,目录数据结构等),除了os特定的API,转换成ansi-c。您可以阅读ZFS代码,这被认为写得很好,因此可以很容易地转到FreeBSD/Mac/Linux。否则,如果您可以满足用户文件系统的性能成本,那么在Mac/Linux/BSD之间维护文件系统是微不足道的。使用每个平台上提供的POSIX API,FUSE和第三方库,这正是我现在所做的。然而,对于Windows,我已经听说过FUSE的实现,但我认为它不是生产就绪。因此,与开发本机文件系统一样,尽可能将您的文件系统逻辑封装在ansi-c中。