创建一个允许装载目录的程序

Creating a program that allows mounting a directory

本文关键字:许装载 程序 一个 创建      更新时间:2023-10-16

我想用C++创建一个程序,允许客户端基本上装载服务器的目录,然后使用该目录及其包含的文件,就好像它们存储在本地一样。

服务器将在linux上运行,但客户端可以是linux或windows。尽管我不介意一开始就把它变成linux,但只要可以添加支持windows客户端的功能,而不需要重写大量代码。

我该如何去创造这样的东西?在过去的几周里,我学到了很多关于套接字的知识,我认为它起到了一定的作用,但我还没有找到如何允许装载一个目录,然后在该目录中的文件发生问题时执行某些操作。

例如,当用户保存文件时,服务器除了保存文件外,还应该能够在另一个目录中创建所述文件的带时间戳的备份。

我该从哪里开始学习如何做到这一点?

在Linux下,现代桌面环境已经包含了这种功能。使用装载和融合,您还可以装载目前可用的大多数网络文件系统。

如果你决定继续这样做,我想你需要在什么级别上选择抽象。桌面环境抽象是否足够,比如在KDE中创建kioslave,这将限制您作为用户使用KDE应用程序。或者,如果您选择FUSE模块,它将在文件系统级别上工作,并适用于所有应用程序,当然,这些应用程序缺乏kioslaves的UI集成。

在Windows下,我认为你唯一的方法是使用提供的虚拟文件系统api,我可以发誓我最近读过类似的东西,但我找不到。我相信也可以进行资源管理器集成,但我不确定。

如果我在写这样的程序,我会使用Qt库,因为我喜欢它们,而且它们在多个平台上都能很好地工作。C++纯粹主义者经常因为各种原因不喜欢它们(比如它们一般的"javaish"性质),所以您可能想研究boost提供的文件系统实用程序。

Qt中的QFileSystemWatcher类可以通知您对文件和目录的更改。

当然,您需要一个套接字连接,并决定在来回发送消息时使用什么协议。通常,最好使用一个通用协议(例如JSON或Google的协议缓冲区),这样就可以轻松地开发其他工具。

我在评论中提到了git,因为提供版本控制功能的程序通常会在后台使用现有的工具,所以您的程序只需调用git即可获得强大的版本控制功能。