いつもお世話になってます、Airです。
表題のとおり、相対パスについての質問です。
私のプログラムを例にとり説明させていただきますと
Aという3Dモデルのファイルがあります。
そしてBというテクスチャ画像のファイルがあります。
AのモデルにBのテクスチャを張って、Aをセーブします。
すると当然AはBのテクスチャを張っているわけですから
Bのファイルパスも自分のデータに入れてセーブします。
この時に、Aのデータとして持たせるBのパスを
絶対パスではなく、Aから見た相対パスとして
一緒に保存したいのです
この相対パスの求め方をどうしたものかと悩んでおります。
皆様ならどのようにされるでしょうか?
良きアドバイスをよろしくお願いします。
読みづらい文章で申し訳ありません。
[ 開発環境 ]
Window XP
VC++ 6.0 MFC
未検証なので微妙なところが違っていると思いますが、
私なら、だいたいこんな感じでやると思います。
方針:
パスが一致するまで、Aのパスを縮めてゆき、
一致したら、縮めた数だけの..と、不一致な残り部分を連結する。
Aの絶対パスを D1:\F11\F12\F13\...\F1n\A
Bの絶対パスを D2:\F21\F22\F23\...\F2m\B
Dx : ドライブ文字
Fxy : フォルダ名
とします。
if ( D1 != D2 ) {
ドライブが違うので不可能;
} else {
String relPath;
for ( k = n; k >= 1; --k ) {
if ( k <= m && F11~F1k までが F21~F2kまでと一致する) {
break;
}
relPath += ..\;
}
return relPath + F2(k+1)\F2(k+2)\...\F2m\B;
}
PathRelativePathTo
とういうAPIがあります。
ご返答ありがとうございます。
PathRelativePathTo が使えそうな感じなので
これでいってみようと思います。
dairygoods さんのご意見も大変勉強になりました。
ありがとうございました。
また何かありましたら、よろしくお願いします。