如果您正在寻找“应用程序级文件系统”,那么在最基本的级别上,您将需要进行字符串替换。在最基本的层面上,有两个字符串
MountPoint
它将用作“挂载点”,例如您的SomeRoot
.
MountResolve
这是mount point
“解析”文件位置时指向的位置。这和你的一样C:\SomeFolder
。
除了这些变量的明显访问器和获取器之外,还需要一个函数来解析路径,这种情况可以是
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;
有了这个,您现在可以解析SomeRoot:data\file.txt
MountResolveC:\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。扩展它以允许多个挂载点也不是很困难。