たとえば "C:/hoge/foo/bar" みたいな文字列の内容を、 "C:/hoge/foo" にしたい、みたいな。下の階層のフォルダを示す場合は末尾に追加するだけでいいので何も考える必要はないのですが、上の階層に移動するとなるととたんに文字列操作が面倒くさくなります。これを文字検索だのなんだのをせずに楽にできないものか。
もしかしたらあるのかもしれないけれど、そういうことをしてくれる API とかが見つからなかったので、以下のようなことをやって実現してみました。
#include#include using namespace std; nt main() { char szSrc[_MAX_PATH] = "C:\\hoge\\foo\\bar\\"; // ↑ を "C:/hoge/foo" にしたい // C:/hoge/foo は 1 個上の階層にあるフォルダなので "../" を追加する ::strcat(szSrc, "..\\"); char szDst[_MAX_PATH] = {0}; ::_fullpath(szDst, szSrc, _MAX_PATH); cout << szDst << endl; //> "C:\hoge\foo\" が出力される }
相対パスから絶対パスに変換する時、元のパスが "C:/hoge/foo/bar/../" みたいなものでもちゃんと変換してくれるようなので、それを利用してみました。色々なフォルダに相対パスを使って移動できるので結構便利かもしれない。