乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 72|回复: 13

[编程交流] vl file delete始终返回

[复制链接]

44

主题

139

帖子

95

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
221
发表于 2022-7-5 15:21:34 | 显示全部楼层 |阅读模式
你好!
 
我编写这个lisp是为了更快地清理FEM的输出。
 
我不明白为什么我不能删除源dxf。发生了什么?
  1. (defun C:arm (/ laylist)
  2. (_SetCLayer "BORDO")
  3. ;(command "._layer" "_OFF" "*" "_YES" "")
  4. (setq laylist (list "ARMAT_INF_DIR_X"
  5.                  "ARMAT_INF_DIR_Y"
  6.                  "ARMAT_SUP_DIR_X"
  7.                  "ARMAT_SUP_DIR_Y"
  8.                  "BORDO"   
  9.                 ))
  10. (foreach ln laylist
  11. (if (tblsearch "LAYER" ln)
  12. (progn
  13. (command "_.LAYER" "_LOCK" ln "")
  14. (princ (strcat "\nLayer " ln " Blocked"))
  15. )
  16. )
  17. )
  18. (command "_.ERASE" "_ALL" "")
  19. (foreach ln laylist
  20. (if (tblsearch "LAYER" ln)
  21. (progn
  22. (command "_.LAYER" "_UNLOCK" ln "")
  23. (princ (strcat "\nLayer " ln " Now Visible"))
  24. )
  25. )
  26. )
  27. (command "_.purge" "_all" "" "_no")
  28. (command "_.erase" (ssget "_A" '((420 . 85))) "")
  29. (setq filename (strcat (getvar "dwgprefix")(getvar "dwgname")))
  30. (command "_.save" "" "_Y")
  31. (vl-file-delete filename)
  32. (command "_.close" "")
  33. )

 
我可以提个建议吗?我在图形中使用dwg作为外部参照。我将其导入4次,并更改图层可视化。。有一种方法可以用这些层生成4个dwg:BORDO+ARMAT\u INF\u DIR\u X,BORDO+ARMAT\u INF\u DIR\u Y,BORDO+ARMAT\u SUP\u DIR\u X,BORDO+ARMAT\u SUP\u DIR\u Y?
 
谢谢你的帮助,
 
丹尼斯
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 15:28:50 | 显示全部楼层
不能删除正在使用的文件(如活动图形)
回复

使用道具 举报

44

主题

139

帖子

95

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
221
发表于 2022-7-5 15:33:51 | 显示全部楼层
嗨,rxl,在代码中,我将文件保存为。这是当前的,不是我要删除的。
 
看代码:我在保存之前得到文件名,我在保存之后尝试删除它。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 15:38:54 | 显示全部楼层
好吧,使用Grrr的代码,假设它是要删除的dxf:
 
 
  1. (setq filename (apply '(lambda (a b c) (strcat a b ".dxf")) (fnsplitl (apply 'strcat (mapcar 'getvar '(dwgprefix dwgname))))))

否则,您必须先关闭图形,然后才能删除它。
 
 
p、 您可能希望使用saveas而不是save。。。
 
 
gr.Rlx
回复

使用道具 举报

44

主题

139

帖子

95

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
221
发表于 2022-7-5 15:42:50 | 显示全部楼层
有了这段代码,我得到了与我相同的,无论如何,vl文件删除不会删除dxf。也许这与权限有关?
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 15:48:14 | 显示全部楼层
 
 
你先尝试saveas了吗?
回复

使用道具 举报

44

主题

139

帖子

95

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
221
发表于 2022-7-5 15:51:40 | 显示全部楼层
你好
是的,我试过:
  1.   (setq filename (strcat (getvar "dwgprefix") "arm"))
  2. ;(command "_.save" "" "_Y")
  3. (vla-SaveAs (vla-get-ActiveDocument(vlax-get-acad-object)) filename ac2004_dwg)
  4. (command "_.close" "")
  5. (vl-file-delete (strcat filename ".dxf"))

 
不幸的是,在_u之后看起来是这样的。关闭lisp停止工作:S
 
编辑:我真的不知道。。事件放入(vl file delete..或命令_.del I无法删除此文件。。
随着saveas的dxf不再是当前的,所以我不知道该怎么办。。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 15:54:20 | 显示全部楼层
 
只要松开关闭。。。打开dxf时,它将变为活动状态。仅使用“保存”时,可以生成dwg,但仍在dxf中。将dxf另存为dwg时,dwg将变为活动状态,您可以删除dxf。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:02:03 | 显示全部楼层
类似这样:
 
  1. (defun c:dxf2dwg ( / dwg old-exp)
  2. (vl-load-com)
  3. ; no nagging when dwg allready exists , don't use if you don't want to overwrite existing dwg's
  4. (setq old-exp (getvar "EXPERT"))(setvar "EXPERT" 2)
  5. (setq dwg (strcat (getvar "dwgprefix")(vl-filename-base (getvar "dwgname"))))
  6. ;(vla-SaveAs (vla-get-ActiveDocument (vlax-get-acad-object)) dwg ac2004_dwg); doesn't seem to release dxf
  7. (command ".saveas" "" dwg) ; looks like this works better
  8. (gc) ; garbage collection, a little flushing after save / write never hurt anybody
  9. (vl-file-delete (strcat dwg ".dxf"))
  10. (setvar "EXPERT" old-exp)
  11. (princ)
  12. )
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 16:07:00 | 显示全部楼层
 
我同意。不仅如此,lisp执行是特定图形的局部执行。关闭图形时,即使lisp中的最后一个命令是命令/commands/vlcmf close/vla quit/exit,lisp也会挂起。。我以前使用一个非常简单的lisp,当打开一个图形时,它以只读方式第二次打开它,然后关闭第一次。使用31次后,会话中无法再打开图形,此时会出现一个弹出窗口,显示“每个会话最多可以打开32个图形”。被一些人称为bug,可能是因为我似乎能够qnew超过32个dwg,但这就像使用close/quit/exit在堆栈中的某个地方留下一些东西(比如可能局部变量没有超出范围)。。
 
我的猜测是,每当你快速操作文件时(如另存为并删除以前的文件,或立即关闭并删除文件),根据操作和其他各种事情,cad可能/将在windows释放文件句柄之前尝试删除文件,导致操作失败。尝试在调用删除文件之前添加延迟。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 03:18 , Processed in 0.377627 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表