相対パスの求め方について

[戻る]
Air 2004/11/09(火) 15:27:52
いつもお世話になってます、Airです。
表題のとおり、相対パスについての質問です。

私のプログラムを例にとり説明させていただきますと
Aという3Dモデルのファイルがあります。
そしてBというテクスチャ画像のファイルがあります。

AのモデルにBのテクスチャを張って、Aをセーブします。
すると当然AはBのテクスチャを張っているわけですから
Bのファイルパスも自分のデータに入れてセーブします。

この時に、Aのデータとして持たせるBのパスを
絶対パスではなく、Aから見た相対パスとして
一緒に保存したいのです
この相対パスの求め方をどうしたものかと悩んでおります。
皆様ならどのようにされるでしょうか?

良きアドバイスをよろしくお願いします。
読みづらい文章で申し訳ありません。

[ 開発環境 ]
Window XP
VC++ 6.0 MFC

dairygoods 2004/11/09(火) 16:07:13
未検証なので微妙なところが違っていると思いますが、
私なら、だいたいこんな感じでやると思います。

方針:
パスが一致するまで、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";
}

こじま 2004/11/09(火) 17:57:12
PathRelativePathTo
とういうAPIがあります。

Air 2004/11/09(火) 22:00:19
[[解決]]
ご返答ありがとうございます。

PathRelativePathTo が使えそうな感じなので
これでいってみようと思います。
dairygoods さんのご意見も大変勉強になりました。
ありがとうございました。

また何かありましたら、よろしくお願いします。

古いスレッドには追加発言できません。