相対パスについて

解決


ひろむ  2006-01-31 01:30:53  No: 129955

ファイルを読み込みたいときに相対パスを使いたいのですが・・・。
..\set\set.txt
とパスを指定してもVBを置いてあるところの上の階層のsetフォルダの中のset.txtを指定することができていません。
どうしてでしょうか?


ken  2006-01-31 01:42:06  No: 129956

.NET?
VB6?

.NETなら
http://dobon.net/vb/dotnet/vb6/apppath.html

VB6なら
App.Path

かと。


ひろむ  2006-01-31 01:57:17  No: 129957

VB6.0です。
>VBを置いてあるところ
というのは作ったプロジェクトファイルなどが置いてあるところのことです。
>App.Path
だとVB本体が置いてあるところがでてくるんですよね?


魔界の仮面弁士  2006-01-31 02:13:40  No: 129958

>>App.Path
>だとVB本体が置いてあるところがでてくるんですよね?
いえ。exeを配置したディレクトリが返されるはずです。
開発時は、vbpファイルのあるディレクトリですね。

VB本体のあるディレクトリが返されるのは、開発したプロジェクトを、
まだ一度も保存していない場合でしょう。


フェイク  2006-01-31 02:21:13  No: 129959

コンパイルしてEXEを作成して実行してください。
EXEの場所がApp.Pathです。
VBエディタで実行させると確かにApp.Pathは、

>App.Path
>だとVB本体が置いてあるところがでてくるんですよね?

となってしまいますね。

私はよくソースに
'MyPath = App.Path              ←A
 MyPath = "D:\EXEのおき場所"    ←B
などと書いてコンパイルしてEXEで動かすとき(最終的な
運用状態)はBをコメントに
エディタ修正しながらでテストする時は、Aをコメントにし
ます。

的外れでしたら、ご勘弁を。


ひろむ  2006-01-31 02:38:12  No: 129960

ありがとうございます。

>VB本体のあるディレクトリが返されるのは、開発したプロジェクトを、
>まだ一度も保存していない場合でしょう。
そのとおりでした。まだ保存していませんでした。
保存したらvbpファイルのあるディレクトリが帰ってきました。

フェイクさん
あなたのやり方を真似させていただきたいと思います。


魔界の仮面弁士  2006-01-31 04:42:33  No: 129961

誤解があるといけないので補足。

>>VB本体のあるディレクトリが返されるのは、開発したプロジェクトを、
ちなみにこれは、「保存していなければ、VB本体のパスが返る」という意味ではありません。
正確には、『未保存時には、CurDir() と同じ値が返される』ですね。

VB6の起動ショートカットの作業フォルダ設定は、初期状態では、
VB本体のあろディレクトリになっているので、未保存時の初期値も、
そのようなパスを返してくる……という話です。

> まだ保存していませんでした。
あ、やはり。(^^;)
# vbpのパスを変えそうにも、そもそもvbpファイルが存在していない状態だった…と。

> エディタ修正しながらでテストする時は、Aをコメントにします。
コメントで切り替える替わりに、「#If ディレクティブ」と
「条件付きコンパイル引数」で場合分けするような手法も見かけますね。

あるいは、後述のコードを用意しておき、
  If IsDesign() Then
    MsgBox "開発環境で実行"
  Else
    MsgBox "exeにコンパイルして実行"
  End If
のようにして条件分けする方法もあります。

'=======================================
'開発環境では True、コンパイルしての実行時には False を返す。
Public Property Get IsDesign() As Boolean
    IsDesign = IsDesign__(True)
End Property
Private Function IsDesign__(ByRef bolIsDesign As Boolean) As Boolean
    bolIsDesign = Not bolIsDesign
    If bolIsDesign = False Then
        Debug.Assert IsDesign__(bolIsDesign)
    End If
    IsDesign__ = bolIsDesign
End Function


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加