如何在文件系统上添加图层?像OneDrive或Google Drive中的缓存 我正在寻找一种方法(使用C ..net或C++和WinApi或任何东西)在文件系统和客户端应用程序之间添加一层来添加自定义行为。

如何在文件系统上添加图层?像OneDrive或Google Drive中的缓存 我正在寻找一种方法(使用C ..net或C++和WinApi或任何东西)在文件系统和客户端应用程序之间添加一层来添加自定义行为。,c++,.net,windows,winapi,filesystems,C++,.net,Windows,Winapi,Filesystems,像Windows上的OneDrive和Google drive应用程序。您可以正常浏览文件,但如果驱动器中缺少给定文件,则会下载该文件。我需要做类似的事情。我需要这个解决方案对其他软件(explorer和访问驱动器上文件的任何其他软件)透明 我真的知道该怎么称呼它。因此,如果您有这类功能的名称,请告诉我。您正在寻找的通常称为“虚拟文件系统”。对于应用程序来说,它看起来像一个文件系统,但是实现是由您自行决定的,允许您以任何您认为合适的方式具体化对象 在Windows上,有几个选项可以实现虚拟文件系

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


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

您正在寻找的通常称为“虚拟文件系统”。对于应用程序来说,它看起来像一个文件系统,但是实现是由您自行决定的,允许您以任何您认为合适的方式具体化对象

在Windows上,有几个选项可以实现虚拟文件系统。最常见和最广泛支持的基础架构是。它允许您注册在文件系统中显示为项目(例如文件或文件夹)的文件。编写一个Shell名称空间扩展并不是一件小事,但它也不是火箭科学


Windows最近增加的一个功能是,它提供了在用户代码中构建虚拟文件系统所需的一切。它在Windows中作为可选组件提供,需要先显式安装。有关使用ProjFS的实现,请参阅github存储库。

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

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

    • 按需加载。只有当应用程序第一次访问文件内容时,才能将其加载到本地驱动器中。文件夹列表可以在首次访问文件夹时完成
    • 脱机文件支持。当服务器不可用时,可以锁定/取消锁定文件以保留在本地驱动器上
    • 下载/上传进度报告
    • 与Windows文件管理器集成。每个项目都显示脱机状态、固定/取消固定状态、同步状态和下载进度
    • 向用户发送消息和错误通知,以及文件系统状态报告
    默认情况下,此API使用的驱动程序随Windows一起安装,不需要安装。以下是一些用于构建类似OneDrive的应用程序的工具:

      微软中的C++样本。继续
    • 提供。继续
  • 使用。它允许您以文件系统的形式表示(投影)一些分层技术数据。它设计用于高速后端存储,例如注册表。以下是它的主要特点:

    • 隐藏数据是远程的事实。用户“认为”文件在本地文件系统中,没有任何状态信息。用户不知道文件内容是可用/不可用还是联机/脱机
    默认情况下不安装ProjFS,需要安装Windows组件(感谢您提供此信息)。以下是使用它构建的一些工具:

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

    • 您可以自定义Windows文件管理器工具栏、快捷菜单、文件夹视图、树状视图和状态栏
    • 您可以扩展Windows文件管理器层次结构,添加新的自定义节点,这些节点的外观和行为类似于文件和文件夹(剪切/复制/粘贴、拖放等),而无需在其背后构建功能性文件系统
    Shell命名空间扩展是Windows的一部分,不需要安装其他组件。在许多情况下,在使用或构建实际文件系统时,您将使用Shell扩展在Windows文件管理器的工具栏上添加快捷菜单和项目。开始使用Shell命名空间扩展的链接: