「アプリケーション レベルのファイル システム」を探している場合、最も基本的なレベルでは、文字列の置換を行う必要があります。最も基本的なレベルでは、2 つの文字列があります。
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());
ただし、その関数で実行できることは他にもあります。ブール値を返す理由は、関数が失敗するはずが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;
}
これにより、基本的な「FileSystem」クラスが 1 つの MountPoint/MountResolve を持つことができます。これを拡張して複数のマウント ポイントを許可することもそれほど難しくありません。