【问题标题】:How to create a virtual filesystem in Rust?如何在 Rust 中创建虚拟文件系统?
【发布时间】:2016-10-15 09:22:10
【问题描述】:

我正在开发一个应用程序,它应该通过网络安装一个文件夹。它应该与 SMB 挂载的文件夹类似,只是服务器不使用 SMB 协议。与此类似:服务器 A 是一个 HTTP 服务器,其中包含文件,客户端 B 应该能够挂载这些文件,以便能够直接访问它们而无需先下载它们(流式传输)。因此,客户端应该能够流式传输文件,即在任意位置访问文件。此外,存储在服务器 A 上的文件以特定方式进行编码、压缩、加密和打包,因此我需要在将它们呈现给虚拟文件系统之前对它们进行解码(进行一些内部处理)。客户端应该具有只读访问权限。我希望客户端在 Windows 和 Linux 上可用。它应该是这样的:

客户端已经挂载了一个文件夹并且想要访问位置 1248989 的 /virtualfolder/data.file。存储在服务器上的数据被分割成任意长度的块(假设它是 1 兆字节)。然后我需要下载对应字节 1000000 - 1999999 的文件部分,解码它们,缓存它们,然后用户可以访问这些数据。

当然,我的解码过程是在内部完成的,我只需要一个 API 来在操作系统上创建一个虚拟文件夹(或文件系统),它会显示文件的名称及其大小并允许用户访问它们。

它应该是这样的: [操作系统] [客户端] [服务器]

访问文件应如下所示:

[OS] 我想从文件 /vfs/somefile.tar 中获取字节 0-255

[客户端] 从服务器的文件 /vfs/somefile.tar 中检索块 0-999999。这对应于块 B5F997084DC8687。下载B5F997084DC8687并解码。

[客户端] 这里是 /vfs/somefile.tar 从 0-255。

[OS] 我想从文件 /vfs/somefile.tar 中获取字节 256-511

[客户端] 这对应于 B5F997084DC8687。已下载并缓存此文件。

[客户端] 这里是 /vfs/somefile.tar 从 256-511。

我认为非常简单。是否有用于此类事情的简单 API?

【问题讨论】:

    标签: linux windows rust virtualfilesystem


    【解决方案1】:

    Linux 和 MacOS 中最流行的虚拟文件系统实现是 FUSE。有一个 Rust crate 可以访问它:rust-fuse

    对于 Windows,Dokan FUSE 包装器声称与 FUSE API 兼容。您可以尝试使用该库构建 rust-fuse crate。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 2016-09-28
      相关资源
      最近更新 更多