ファイルを読み込みたいときに相対パスを使いたいのですが・・・。
..\set\set.txt
とパスを指定してもVBを置いてあるところの上の階層のsetフォルダの中のset.txtを指定することができていません。
どうしてでしょうか?
.NET?
VB6?
.NETなら
http://dobon.net/vb/dotnet/vb6/apppath.html
VB6なら
App.Path
かと。
VB6.0です。
>VBを置いてあるところ
というのは作ったプロジェクトファイルなどが置いてあるところのことです。
>App.Path
だとVB本体が置いてあるところがでてくるんですよね?
>>App.Path
>だとVB本体が置いてあるところがでてくるんですよね?
いえ。exeを配置したディレクトリが返されるはずです。
開発時は、vbpファイルのあるディレクトリですね。
VB本体のあるディレクトリが返されるのは、開発したプロジェクトを、
まだ一度も保存していない場合でしょう。
コンパイルしてEXEを作成して実行してください。
EXEの場所がApp.Pathです。
VBエディタで実行させると確かにApp.Pathは、
>App.Path
>だとVB本体が置いてあるところがでてくるんですよね?
となってしまいますね。
私はよくソースに
'MyPath = App.Path ←A
MyPath = "D:\EXEのおき場所" ←B
などと書いてコンパイルしてEXEで動かすとき(最終的な
運用状態)はBをコメントに
エディタ修正しながらでテストする時は、Aをコメントにし
ます。
的外れでしたら、ご勘弁を。
ありがとうございます。
>VB本体のあるディレクトリが返されるのは、開発したプロジェクトを、
>まだ一度も保存していない場合でしょう。
そのとおりでした。まだ保存していませんでした。
保存したらvbpファイルのあるディレクトリが帰ってきました。
フェイクさん
あなたのやり方を真似させていただきたいと思います。
誤解があるといけないので補足。
>>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
ツイート | ![]() |