2017-08-15 80 views
0

我正在使用SolidWorks插件(DLL)。它取决于几个文件(sqlite数据库,草图等)。要安装插件,只需使用SolidWorks打开DLL。DLL中File.Open()的相对路径

在DLL中有一些例程调用File.Open()关于我将通过相对路径引用的许多资源文件。目录。层次结构看起来像:

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

其中根目录。的插件可以在系统上的任何地方。 SolidWorks可以使用Open File对话框轻松加载该插件。问题是,一旦我加载DLL,任何调用File.Open()(例如File.Open("Sketches/various.sldprt"))与相对路径将不会工作,因为它将相对于目录。其中SLDWORKS.exe(SW安装目录)驻留,而不是目录。的DLL。这意味着我必须将所有资源文件放在SolidWorks安装目录中,这是我想避免的。那可能吗?

+0

的一般性意见将是“与工作目录不要乱”!如果你试图从你的代码中改变工作目录,它很可能会破坏其他的东西。 “工作目录”属于主要的可执行文件。我会建议保持原样。 你可以看到你的插件相关的文件是否在任何标准的“相对”目录,例如,base_dir/plugins等?然后您可以尝试使用相对的文件夹名称。 – Subbu

+0

@Subbu是的,我试图避免与SW的工作目录混淆,但相对路径并不按照我的意图工作。为了清晰起见,我编辑了自己的帖子,因为我在深夜发帖,对此感到遗憾 – Alex

回答

1

你可以做的是在调用File.Open()之前,将你的插件文件夹作为前缀添加到任何本地路径。 外接程序文件夹中,可以得到:

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