【问题标题】:Relative Paths of File.Open() in a DLLDLL 中 File.Open() 的相对路径
【发布时间】:2017-08-15 08:12:00
【问题描述】:

我正在开发 SolidWorks 插件 (DLL)。它取决于几个文件(sqlite DB、草图等)。要安装插件,您只需使用 SolidWorks 打开 DLL。

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

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

根目录在哪里。插件可以在系统上的任何位置。 SolidWorks 可以通过打开文件对话框轻松加载该插件。问题是,一旦我加载了 DLL,任何使用相对路径对File.Open()(例如File.Open("Sketches/various.sldprt"))的调用都将不起作用,因为它将是相对于目录的。 SLDWORKS.exe (软件安装目录)驻留在哪里而不是目录。的DLL。这意味着我必须将所有资源文件放在 SolidWorks 安装目录中,我想避免这种情况。这可能吗?

【问题讨论】:

  • 一般性评论是“不要弄乱工作目录”!如果您尝试从代码中更改工作目录,则可能会破坏其他内容。 “工作目录”属于主可执行文件。我建议保持原样。你能看到你的插件相关文件是否在任何标准的“相对”目录中,例如 base_dir/plugins 等?然后,您可以尝试使用相对文件夹名称。
  • @Subbu 是的,我试图避免弄乱 SW 的工作目录,但相对路径没有按我的预期工作。为了清楚起见,我在深夜发布时编辑了我的帖子,对此感到抱歉

标签: c# visual-studio dll plugins solidworks


【解决方案1】:

您可以做的是在调用 File.Open() 之前将您的插件文件夹作为前缀添加到任何本地路径。 Addin 文件夹获取方式如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2011-02-28
    • 2010-10-03
    相关资源
    最近更新 更多