2017-08-15 12 views
0

私はSolidWorksプラグイン(DLL)で作業しています。いくつかのファイル(sqlite DB、スケッチなど)に依存します。プラグインをインストールするには、SolidWorksでDLLを開くだけです。DLL内のFile.Open()の相対パス

DLLには、相対パスで参照するいくつかのリソースファイルでFile.Open()を呼び出すルーチンがあります。 Dir。

Plugin/ 
    plugin.dll 
    Sketches/ 
     various.sldprt 
    otherfile.db 
    otherdeps.txt 
    ... 

ルートディレクトリは次のようになります。のプラグインは、システムのどこにでも置くことができます。このプラグインは、Open File Dialogを使用してSolidWorksによって簡単にロードできます。問題は、DLLをロードすると、相対パスを持つFile.Open()(例:File.Open("Sketches/various.sldprt"))への呼び出しは、相対パスになるため機能しません。 SLDWORKS.exe(SWインストールディレクトリ)はdirの代わりに存在します。 DLLの。これは、すべての私のリソースファイルをSolidWorksのインストールディレクトリに置かなければならないことを意味します。私が避けたいのは、このディレクトリです。それは可能ですか?

+0

一般的なコメントは、「作業ディレクトリに混乱しないでください」となります。あなたのコードから作業ディレクトリを変更しようとすると、他の何かを改行する可能性があります。 "作業ディレクトリ"はメインの実行可能ファイルに属します。私はそれをそのまま残すことをお勧めします。 プラグイン関連のファイルが、たとえば、base_dir/pluginsなどの標準の相対ディレクトリにあるかどうかを確認できますか?その後、相対的なフォルダー名で試すことができます。 – Subbu

+0

@Subbuええ、私はSWの作業ディレクトリを迷惑にならないようにしようとしていますが、相対パスは意図したとおりに動作しません。私は深夜に投稿したように私の投稿を編集しました。 – Alex

答えて

1

あなたができることは、File.Open()を呼び出す前に、任意のローカルパスに接頭辞としてaddinフォルダを追加することです。 Addinフォルダは、次のように取得できます。

string path = System.IO.Path.GetDirectoryName( 
     System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);