我一直在研究一个文件系统的库,它允许在纯粹的应用程序级别上进行路径安装。这可能不只是称为“路径安装”,因为它具有操作系统级别路径安装的含义,但我不确定其他术语。我希望能够找到一些但无法找到我正在寻找的任何东西(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/