c++ - 允许在应用程序级别挂载的文件系统库

标签 c++ design-patterns architecture filesystems

我一直在研究一个文件系统的库,它允许在纯粹的应用程序级别上进行路径安装。这可能不只是称为“路径安装”,因为它具有操作系统级别路径安装的含义,但我不确定其他术语。我希望能够找到一些但无法找到我正在寻找的任何东西(boost::filesystem 是我找到的最接近的)。我希望能够比较几个不同的库,希望了解它们的优缺点。

我所说的带路径挂载的文件系统的意思是这样的路径

"SomeRoot:data\file.txt"

"SomeRoot" 将替换为 C:\SomeFolder",后者将设置为文件挂载系统。

有人知道允许路径挂载的文件系统吗?

编辑:

由于看起来可能没有很多库,所以我也对如何正确构建一个感兴趣。

最佳答案

如果您正在寻找“应用程序级文件系统”,那么在最基本的级别上,您将需要进行字符串替换。在最基本的层面上有两个字符串

挂载点 它将用作“挂载点”,例如您的 SomeRoot

MountResolve “解析”文件位置时,挂载点 指向的位置。这与您的 C:\SomeFolder 相同。

除了这些变量的明显访问器和 getter 之外,还需要一个函数来解析路径,在这种情况下可以

bool ResolvePath(const String& mountPath, String& resolvedPath);

ResolvePath的内容很简单,你只需要将当前的MountPoint字符串替换到mountPath中,然后放置结果即可进入 resolvedPath

resolvedPath = mountPath;
resolvedPath.replace(0, mMountPoint.size() + 1, mMountResolve.c_str(), mMountResolve.size());

但是,在该函数中可以做更多的事情。我让它返回 bool 值的原因是因为函数应该失败 mountPath 没有 MountPoint。要检查,只需执行一个简单的 string::find

if(mountPath.find(mMountPoint) == String::npos)
    return false;

这样,如果 MountResolve 设置为 ,您现在可以将 SomeRoot:data\file.txt 解析为 C:\SomeFolder\data\file.txt C:\SomeFolder\。但是,您提到的末尾没有斜线。由于目前无需执行任何操作来验证该斜线,您的结果将是 C:\SomeFolderdata\file.txt。这是错误的。

在设置挂载解析的访问权限上,您想检查是否有尾随的文件夹斜杠。如果没有,则添加。

void FileSystem::SetMountResolve(const String& mountResolve)
{
    mMountResolve = mountResolve;

    if(*(mMountResolve.end() - 1) != FOLDERSLASH)
        mMountResolve += FOLDERSLASH;
}

这将允许一个基本的“文件系统”类拥有一个 MountPoint/MountResolve。扩展它以允许多个挂载点也不会很困难。

关于c++ - 允许在应用程序级别挂载的文件系统库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10021665/

相关文章:

c++ - 通过代码确定控制台是否应保存到文件(以及该文件的名称)

c++ - 取消运行长时间操作的线程

javascript - 可以共享作用域和访问实例的私有(private)原型(prototype)方法

java - 多人游戏的服务器架构?

c++ - 想要 Apache mod_c++ 吗?

c++ - QTableWidgetItem 子类运算符 <() 在对 QTableWidget 进行排序时永远不会被调用

c++ - 从枚举中获取所有值

c++ - 在初始化列表中初始化许多对象成员变量

c++ - 关于 C++ 继承的初学者架构主题

javascript - 如何在 JS(浏览器端)中使用 `require` 和依赖注入(inject)、服务定位?