EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

萧闫子 发表于 2014-1-8 15:10:45

[用户交互] 获取AutoCAD的当前目录

WINDOWS系统快捷方式的“起始位置”属性指出了进程的最初的“当前目录”。当前或工作目录的概念在我所使用的各种操作系统下是相通的:进程的当前目录,即用于一定操作的默认文件系统目录(比如在AUTOCAD中打开一张图纸)。当Windows系统试图确认要加载的DLL文件位置时,也会用到它。       当启动一个进程时,可能需要指定进程的当前目录:通常的做法是在命令行窗体下修改快捷方式中的“起始位置”项,以改变 当前目录(使用CHDIR或CD),并从此处启动可执行文件,或在Visual Studio调试器下指定此程序的工作目录。并且当进程运行后,当前目录也是可以更改的。       AutoCAD 2008的默认“起始位置”为"C:\Program Files\Autodesk\AutoCAD 2008\UserDataCache\"。为了查看在程序中查询“起始位置”的过程,我对这个快捷方式进行了复制,并把“起始位置”修改成了"c:\temp":
下面是我知道的两种查询此特性的方法:System.Environment.CurrentDirectorySystem.IO.Directory.GetCurrentDirectory()我创建了一个命令,CURDIR,用来查询此特性并打印出此查询结果:

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
namespace CurrentDirectory
{
public class Commands
{

public void GetCurrentDirectory()
{
   Document doc =
      Application.DocumentManager.MdiActiveDocument;
   Database db = doc.Database;
   Editor ed = doc.Editor;
   ed.WriteMessage(
      "\nSystem.Environment.CurrentDirectory: "
      + System.Environment.CurrentDirectory
      + "\nSystem.IO.Directory.GetCurrentDirectory(): "
      + System.IO.Directory.GetCurrentDirectory()
   );
}
}
}上面的代码能很好的运行,但它并不能返回我们所想要的结果:命令执行时,模块是如何加载的。如果我们使用“命令加载”来加载模块,模块运行足够早的话,通常情况下会返回我们期望的结果。下面是在修改过快捷方式的AutoCAD 实例中,执行CURDIR命令加载我们的模块时所返回的结果:Command: curdir
System.Environment.CurrentDirectory: C:\tempSystem.IO.Directory.GetCurrentDirectory(): C:\temp另一方面,如果我们使用NETLOAD命令来加载我们的模块,就可以得到所加载模块的目录:Command: netload
Command: curdir
System.Environment.CurrentDirectory: C:\Program Files\Autodesk\ObjectARX2008\samples\dotNet\Prompts\bin\DebugSystem.IO.Directory.GetCurrentDirectory(): C:\Program Files\Autodesk\ObjectARX2008\samples\dotNet\Prompts\bin\Debug这花费我了不少时间来思考所发生的问题: AutoCAD中标准的“文件导航”对话框,不管是在打开一张图纸文件,加载一个应用,还是对另一种类型的文件执行一种操作时-打开的当前目录为其最近操作的目录,即第一次运行和关闭时的文档位置。所以即使你没有执行过“打开”命令,你所浏览过的目录(不包括进行取消操作的目录)也会成为新的当前目录。不管这个结果是否直观或者是在预料之中的,这都不是我真正想说的(尽管我理解为什么大家会对此有意见)。这篇文章的真正寓意是获取的AutoCAD(或实际中的其他复杂应用 )的“起始位置”并不是十分可靠,除非在执行过程中及早进行获取。因为进程中的代码在需要时就会对设置进行修改。      尽管不是100% 可靠 – 并不能确保一些别的代码并没有提前对此特性进行了修改- 确认“起始位置”的最好时机是在AutoCAD启动并加载一个模块时。

页: [1]
查看完整版本: [用户交互] 获取AutoCAD的当前目录