EaBIM

标题: [用户交互] 获取AutoCAD的当前目录 [打印本页]

作者: 萧闫子    时间: 2014-1-8 15:10
标题: [用户交互] 获取AutoCAD的当前目录
WINDOWS系统快捷方式的“起始位置”属性指出了进程的最初的“当前目录”。当前或工作目录的概念在我所使用的各种操作系统下是相通的:进程的当前目录,即用于一定操作的默认文件系统目录(比如在AUTOCAD中打开一张图纸)。当Windows系统试图确认要加载的DLL文件位置时,也会用到它。
       当启动一个进程时,可能需要指定进程的当前目录:通常的做法是在命令行窗体下修改快捷方式中的“起始位置”项,以改变 当前目录(使用CHDIR或CD),并从此处启动可执行文件,或在Visual Studio调试器下指定此程序的工作目录。并且当进程运行后,当前目录也是可以更改的。
       AutoCAD 2008的默认“起始位置”为"C:\Program Files\Autodesk\AutoCAD 2008\UserDataCache\"。为了查看在程序中查询“起始位置”的过程,我对这个快捷方式进行了复制,并把“起始位置”修改成了"c:\temp":

下面是我知道的两种查询此特性的方法:
System.Environment.CurrentDirectory
System.IO.Directory.GetCurrentDirectory()
我创建了一个命令,CURDIR,用来查询此特性并打印出此查询结果:


  1. using Autodesk.AutoCAD.Runtime;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.EditorInput;
  5. namespace CurrentDirectory
  6. {
  7. public class Commands
  8. {
  9. [CommandMethod("CURDIR")]
  10. public void GetCurrentDirectory()
  11. {
  12.    Document doc =
  13.       Application.DocumentManager.MdiActiveDocument;
  14.    Database db = doc.Database;
  15.    Editor ed = doc.Editor;
  16.    ed.WriteMessage(
  17.       "\nSystem.Environment.CurrentDirectory: "
  18.       + System.Environment.CurrentDirectory
  19.       + "\nSystem.IO.Directory.GetCurrentDirectory(): "
  20.       + System.IO.Directory.GetCurrentDirectory()
  21.    );
  22. }
  23. }
  24. }
复制代码
上面的代码能很好的运行,但它并不能返回我们所想要的结果:命令执行时,模块是如何加载的。如果我们使用“命令加载”来加载模块,模块运行足够早的话,通常情况下会返回我们期望的结果。
下面是在修改过快捷方式的AutoCAD 实例中,执行CURDIR命令加载我们的模块时所返回的结果:
Command: curdir

System.Environment.CurrentDirectory: C:\temp
System.IO.Directory.GetCurrentDirectory(): C:\temp
另一方面,如果我们使用NETLOAD命令来加载我们的模块,就可以得到所加载模块的目录:
Command: netload

Command: curdir

System.Environment.CurrentDirectory: C:\Program Files\Autodesk\ObjectARX
2008\samples\dotNet\Prompts\bin\Debug
System.IO.Directory.GetCurrentDirectory(): C:\Program Files\Autodesk\ObjectARX
2008\samples\dotNet\Prompts\bin\Debug
这花费我了不少时间来思考所发生的问题: AutoCAD中标准的“文件导航”对话框,不管是在打开一张图纸文件,加载一个应用,还是对另一种类型的文件执行一种操作时-打开的当前目录为其最近操作的目录,即第一次运行和关闭时的文档位置。所以即使你没有执行过“打开”命令,你所浏览过的目录(不包括进行取消操作的目录)也会成为新的当前目录。
不管这个结果是否直观或者是在预料之中的,这都不是我真正想说的(尽管我理解为什么大家会对此有意见)。这篇文章的真正寓意是获取的AutoCAD(或实际中的其他复杂应用 )的“起始位置”并不是十分可靠,除非在执行过程中及早进行获取。因为进程中的代码在需要时就会对设置进行修改。
        尽管不是100% 可靠 – 并不能确保一些别的代码并没有提前对此特性进行了修改- 确认“起始位置”的最好时机是在AutoCAD启动并加载一个模块时。






欢迎光临 EaBIM (https://eabim.net/) Powered by Discuz! X3.2