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

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 669|回复: 0
打印 上一主题 下一主题

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

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12406

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 15:10:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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启动并加载一个模块时。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-27 09:35

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表