現在、特定のディレクトリにある特定のmdbファイルを、そのパスとファイル名を直接記述することで、プログラム起動時に参照するようにしています。
これを、プログラムと同じディレクトリに格納した特定のmdbファイルを、
プログラム起動時に自動で読み込むようにしたいのですが、
起動したプログラムの格納されたディレクトリへの絶対パスは、
どのようにして取得すればよいでしょうか。
MsgBox(My.Application.Info.DirectoryPath) とか。
回答ありがとうございます。
ただ、「名前 'My' は宣言されていません。」とエラーになります。
使用しているのは、Microsoft Visual Studio .NET 2003 です。
この場合、Functionを新たに作る必要があるのでしょうか。
自己解決しました。
MSDNでの、My.Application.Info.DirectoryPath の説明にあった、
「アプリケーションが格納されているディレクトリを取得」で検索したところ、
下記のページを得ることが出来ました。
http://msdn2.microsoft.com/ja-jp/library/system.appdomainsetup.applicationbase(VS.80).aspx
よって、下記のようにして取得することが出来ました。
Dim domaininfo As New AppDomainSetup
domaininfo.ApplicationBase = System.Environment.CurrentDirectory
MsgBox(domaininfo.ApplicationBase)
さらに、下記でも取得できることが分かりました。
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
・CurrentDirectoryは起動したプログラムのあるパスとは限りません。
・Assembly.Locationはシャドウコピーされた場合にシャドウコピー先のパスを返します (NUnitとかで嵌る)。
というわけで,
Assembly.CodeBaseから引っ張ってくるのが一番確実なのではないかと。
YuOさん
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
を使用した場合は「file:」が先頭に付きましたが、
特に問題はないのでしょうか。
> System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
> を使用した場合は「file:」が先頭に付きましたが、
> 特に問題はないのでしょうか。
プログラムの作り次第。
Uriを受け付けるのであれば大丈夫でしょうし,Uriを受け付けないのであればだめでしょう。
まぁ,System.UriクラスのLocalPathプロパティ使って変換してしまうのが手っ取り早いでしょうけど。
ツイート | ![]() |