如何在文件系统之上添加层?像 OneDrive 或 Google Drive 中的缓存

Hoo*_*och 2 .net c++ windows filesystems winapi

我正在寻找一种方法(使用 C# .Net 或 C++ 和 WinApi 或任何东西)在文件系统和客户端应用程序之间添加一个层以添加自定义行为。

就像 Windows 上的 OneDrive 和 Google Drive 应用程序。您可以正常浏览文件,但如果驱动器中缺少给定文件,则会下载该文件。我需要做类似的事情。而且我需要这个解决方案对其他软件(资源管理器和任何其他访问驱动器上文件的软件)是透明的。

我什至知道该怎么称呼它。因此,如果您有此类功能的名称,请告诉我。

IT *_*DAV 5

以下是在 Windows 上构建虚拟文件系统的一些方法:

  1. 使用云文件 API。OneDrive 是使用此 API 构建的。它专为低速远程(云)存储而设计,例如文档管理系统。以下是它提供的一些功能:

    • 按需加载。只有当应用程序第一次访问它时,您才能将文件内容加载到本地驱动器中。文件夹列表可以在第一次访问文件夹时完成。
    • 离线文件支持。当服务器不可用时,您可以固定/取消固定文件以保留在本地驱动器上。
    • 下载/上传进度报告。
    • 与 Windows 文件管理器集成。每个项目都显示脱机状态、固定/未固定状态、同步状态和下载进度。
    • 给用户的消息和错误通知,以及文件系统状态报告。

    此 API 使用的驱动程序默认随 Windows 一起安装,不需要安装。以下是一些用于构建类似 OneDrive 的应用程序的工具:

  2. 使用投影文件系统 (ProjFS)。它允许您将一些分层技术数据表示(项目)为文件系统。它专为高速后端存储而设计,例如注册表。这是它的主要特点:

    • 隐藏数据远程的事实。用户“认为”文件在本地文件系统中,没有任何状态信息。用户不知道文件内容是可用/不可用还是在线/离线。

    ProjFS 默认不安装,需要安装 Windows 组件(感谢IInspectable提供此信息)。以下是一些使用它构建的工具:

  3. 使用Shell 命名空间扩展。通常用于为 Windows 文件管理器创建 UI 扩展。例如,Windows 回收站和打印机是命名空间扩展。它们不能通过标准的 Windows 文件 API 使用,应用程序无法读取/写入它,除非它重定向到它背后的真实文件系统。这是它提供的一些功能:

    • 您可以自定义 Windows 文件管理器工具栏、快捷菜单、文件夹视图、树视图和状态栏。
    • 您可以扩展 Windows 文件管理器层次结构,添加外观和行为类似于文件和文件夹(剪切/复制/粘贴、拖放等)的新自定义节点,而无需在其背后构建功能文件系统。

    Shell 命名空间扩展是 Windows 的一部分,不需要安装其他组件。在许多情况下,您将使用 Shell 扩展在 Windows 文件管理器的工具栏上添加快捷菜单和项目,同时使用Cloud Files APIProjFS构建实际文件系统。开始使用 Shell 命名空间扩展的链接: