cad.net关于保存文件Database.SaveAs()出现eFileAccessErr错误的解决方法

1.前台开启dwg保存方法出错

出错例子

前台打开图纸的时候(后台不会),使用保存函数db.Save(),无论如何都会出错.

但是当使用db.SaveAs()时,除了调用被命令的文档之外,其他文档都会抛出错误"eFileAccessErr"

可以从下面这个例子了解到:

[CommandMethod("save_test1", CommandFlags.Session)]
public void save_test1()
{
    foreach (Document doc in Acap.DocumentManager)
    { 
        //当打开多份图纸的时候,用db.SaveAs都是会出错的.
        var db = doc.Database;
        //using (doc.LockDocument())//无论是否使用文档锁
        {
          //db.SaveAs(db.Filename, db.SecurityParameters); //无论是这种
            db.SaveAs(db.Filename, DwgVersion.Current);    //还是这种
        }
    }
}

保存成功的例子1:保存并关闭文档

但是文档上面也有一个保存函数,这个倒是成功的...不过就是会关闭文档罢了.

跟e大讨论了之后,发现这要从cad程序架构来看,
文档doc和数据库db是分开的对象,db在doc下,doc占用了文件,db无法覆盖操作,所以用文档的 Document.CloseAndSave() 可以成功(因为桌子在内部做了工作...)

[CommandMethod("save_test2", CommandFlags.Session)]
public void save_test2()
{
    foreach (Document item in Acap.DocumentManager)
    { 
        item.CloseAndSave(item.Database.Filename); 
    }
}

保存成功的例子2:处理三种状态

但是我程序处理保存的时候要同时处理三种状态: 1,前台打开(激活的) 2,前台打开(未激活) 3,后台打开的

同时,我不调用令人讨厌的 Document.CloseAndSave() ,福萝卜提示我用发送命令.

using Acap = Autodesk.AutoCAD.ApplicationServices.Application;        

private static void TestSaveDwgFiles(Database db)
{
    bool flag = true;
    foreach (Document doc in Acap.DocumentManager)
    {
        // 前台开图,使用命令保存
        if (doc.Database.Filename == db.Filename)
        {
            doc.SendStringToExecute("_qsave\n", false, true, true); //不需要切换文档
            flag = false;
            break;
        }
    }
    if (flag)
    { 
        // 后台开图,用数据库保存
        db.SaveAs(db.Filename, db.SecurityParameters); 
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mryinp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值