我正在寻找一种在Python中创建虚拟文件系统以创建目录和文件的方法,然后再将这些目录和文件写入磁盘。
使用PyFilesystem,我可以使用以下内容构造一个内存文件系统:
>>> import fs
>>> dir = fs.open_fs('mem://')
>>> dir.makedirs('fruit')
SubFS(MemoryFS(), '/fruit')
>>> dir.makedirs('vegetables')
SubFS(MemoryFS(), '/vegetables')
>>> with dir.open('fruit/apple.txt', 'w') as apple: apple.write('braeburn')
...
8
>>> dir.tree()
??? fruit
? ??? apple.txt
??? vegetables
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够执行以下操作:
dir.write_to_disk('<base path>')
Run Code Online (Sandbox Code Playgroud)
要将此结构写入磁盘,<base path>将在其中创建此结构的父目录在哪里。
据我所知,PyFilesystem无法实现这一目标。还有什么我可以代替的,还是我必须自己实现?
我已经看到一些应用程序能够在 MacOS 上的 Finder 中将自己表示为外部磁盘。通常,这些是云存储应用程序,例如PCloud Drive和WD Discovery。我想知道他们是如何做到这一点的。
我意识到云存储可能只是实现了一些远程文件系统协议,例如 Samba 或 AFP。但是我仍然不太明白应用程序如何将文件系统直接挂载到 Finder 中。另外,如果不依赖网络存储,是否有更有效的方法来挂载虚拟文件系统?
我正在开发一个应用程序,它应该通过网络安装一个文件夹。它应该显示类似于 SMB 挂载的文件夹,只是服务器不使用 SMB 协议。类似于:服务器 A 是一个 HTTP 服务器,包含文件,客户端 B 应该能够挂载这些文件,以便能够直接访问它们,而无需先下载它们(流式传输)。因此,客户端应该能够流式传输文件,即访问任意位置的文件。此外,存储在服务器 A 上的文件以特定方式进行编码、压缩、加密和打包,因此我需要在将它们呈现给虚拟文件系统之前对其进行解码(进行一些内部处理)。客户端应具有只读访问权限。我希望客户端可以在 Windows 和 Linux 上使用。它应该看起来像这样:
客户端已安装一个文件夹并希望访问位置 1248989 处的 /virtualfolder/data.file。存储在服务器上的数据被分割成任意长度的块(假设它是 1 MB)。然后,我需要下载文件中与字节 1000000 - 1999999 相对应的部分,对其进行解码、缓存,然后用户可以访问该数据。
当然,我的解码过程是在内部完成的,我只需要一个 API 在操作系统上创建一个虚拟文件夹(或文件系统),该文件夹显示文件的名称及其大小并让用户访问它们。
它应该如下所示: [OS] <-虚拟文件系统 API-> [客户端] <-某些协议-> [服务器]
访问文件应该如下所示:
[操作系统] 我想从文件 /vfs/somefile.tar 获取字节 0-255
[客户端] 从服务器的文件 /vfs/somefile.tar 中检索块 0-999999。这对应于块 B5F997084DC8687。下载 B5F997084DC8687 并对其进行解码。
[客户端] 这里是 /vfs/somefile.tar 从 0-255。
[操作系统] 我想从文件 /vfs/somefile.tar 获取字节 256-511
[客户端] 这对应于 B5F997084DC8687。已经下载并缓存了该文件。
[客户端] 这是来自 256-511 的 /vfs/somefile.tar。
我认为非常简单。有没有一个简单的 API 可以处理这些事情?
自 Mac OS 11 Big Sur 发布以来,Apple 仅允许在恢复模式下安装 kext 驱动程序。它还禁止从 Apple Store 安装 kext 驱动程序。我猜这是 macFuse 的终结,至少对于虚拟/云文件系统而言。迁移路径是什么以及如何为 Mac OS 11+ 构建虚拟文件系统,尤其是文档管理和云存储,类似于 OneDrive、DropBox 等。
我也可以猜测类似的问题也可能出现在 Windows 上。我可以想象,微软将遵循苹果的路径,在未来的版本中禁止 Windows 上的文件系统驱动程序和过滤器用于这些目的。如果发生这种情况,任何有关未来迁移的提示将不胜感激。
filesystems macfuse virtualfilesystem virtual-drive kernel-extension
我在使用 java nio 遍历 zip 文件的 VFS(虚拟文件系统)的文件树时遇到异常,这是我的代码:
public static void list(String zipFilePath) throws IOException{
FileSystem fs = FileSystems.newFileSystem(Paths.get(zipFilePath), null);
Path startPath = fs.getPath("/");
Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
System.out.println("Dir : " + dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("\t->File : " + file);
return FileVisitResult.CONTINUE;
}
});
}
Run Code Online (Sandbox Code Playgroud)
异常表示文件不存在,但我已经解压缩了存档(zip),并且文件在那里......知道为什么吗?
这是例外:
java.nio.file.NoSuchFileException: /Dir1/Dir2/Dir3/Dir4/ExcelFile.xlsm
at com.sun.nio.zipfs.ZipPath.getAttributes(ZipPath.java:657)
at com.sun.nio.zipfs.ZipFileSystemProvider.readAttributes(ZipFileSystemProvider.java:285)
at java.nio.file.Files.readAttributes(Files.java:1669)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:105)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:199)
at …Run Code Online (Sandbox Code Playgroud) OneDrive 文件夹可以显示文件,就像存在一样,但它们不在磁盘上。
我想以编程方式创建一个类似的文件夹。OneDrive 客户端使用什么 API?