1

私は Visual Studio で Windows フォーム アプリケーションを作成しています。相対パスに問題があります。たとえば、"\Databases\bla.mdb" の相対パスを使用して OleDbConnection を使用してデータベースに接続すると、Visual Studio からのデバッグ中にうまく機能します。ただし、実行可能パスが somepath\Debug\app.exe の場合、データベースは実際には somepath\Databases\bla.mdb にあります」

使用されている「ベースパス」を定義する設定はどこにありますか? Application::CommonAppDataPath、ExecutablePath、StartupPath、UserAppDataPath、および LocalUserAppDataPath を確認しましたが、「somepath」を返すものはありません。

最後のアイデアは、Databases フォルダーが実行可能ファイルと同じフォルダーにあるということですが、ExecutablePath などでそれをハードコードすると、デバッグ中に機能しません...そのままにしておくと、正常に動作します (.exe と同じフォルダー内の Databases フォルダーでデバッグおよび展開されます) が、別のラップトップで試してみたところ、.exe 内のどこかにある Databases フォルダーが検索されますMy Documents

アドバイス、回答、またはオリエンテーションをいただければ幸いです。私のグーグルはこれまで役に立たなかった

4

3 に答える 3

2

AppDomain.CurrentDomain.BaseDirectoryは、実行可能ファイルのルート ディレクトリを文字列として取得します。私は通常、次のように System.IO.Path.Combine で使用します

string DbLocation = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Databases\bla.mdb";

System.Reflection が機能するには、using ステートメントが必要です。

于 2012-05-17T23:44:08.200 に答える
1

アプリケーションでは、安全のために絶対パスを優先する必要があります。

お分かりのように、相対パスが使用されている場合、アプリケーションのスタートアップ フォルダーを変更するだけで、ターゲット パスが完全に変更される可能性があります。起動フォルダーは、実行可能ファイルを含むフォルダーである場合とそうでない場合があり、ほとんど制御できません (エンド ユーザーは、コマンド プロンプトで好きなフォルダーの下で実行可能ファイルを自由に実行できるため)。

したがって、David が推奨するものを使用して、相対パスから絶対パスを作成できます。http://filedirectorypath.codeplex.com/などのライブラリを使用することもできます。

于 2012-05-18T02:18:10.533 に答える
1

最後のアイデアは、データベース フォルダーが実行可能ファイルと同じフォルダーにあることです。

デバッグ ディレクトリのレイアウトが展開ディレクトリのレイアウトと同じではないということですか?

それは良い計画ではありません。デバッグと展開で相対パス用にアプリケーションのルート ディレクトリを "リベース" しようとする代わりに、両方のシナリオのディレクトリ レイアウトを一致させようとする必要があります。

于 2012-05-17T23:47:25.847 に答える