arx对正在操作的文件进行保存

//对正在操作的文件进行保存
STDMETHODIMP CTHDatabase::Save(void)
{
 // TODO: 在此添加实现代码
 Acad::ErrorStatus es ;
 try{
  AcDbDatabase* pCurDb = acdbHostApplicationServices()->workingDatabase();
  if(pCurDb == NULL)
  {
   return Error(L"Fialed to get current docment " ,IID_ITHDatabase,E_FAIL);
  }
  AcAxDocLock docLock( pCurDb, AcAxDocLock::kCurDocSwitch );
  if(docLock.lockStatus() != Acad::eOk)
   throw docLock.lockStatus();

  //得到被操作dwg文件的数据库
  AcDbDatabase* pWorkDb = NULL;
  CAcApDocLockServer tempDocLockServer;

  if(m_strFileName.IsEmpty())
   pWorkDb = pCurDb;
  else
  {
   pWorkDb = tempDocLockServer.GetDataBase(m_strFileName);
   if(NULL == pWorkDb)
   {
    CString strErr = L"Fialed To open the " ;
    return Error(strErr + m_strFileName,IID_ITHDatabase,E_FAIL);
   }
  }
  //如果当前操作的文件不是ACAD当前活动文档,则进行存盘
  if(!m_strFileName.IsEmpty()){
            //遍历ACAD所打开的所有文档,如果当前操作的文件已经被ACAD打开,
   //那么把此文档切换为活动文档,存盘后在切换到原来的活动文档
   AcApDocument* pCurDoc = curDoc();
   AcApDocumentIterator* iter = acDocManager->newAcApDocumentIterator();
   if (iter) {
    AcApDocument* tmpDoc;
    for (; !iter->done(); iter->step()) {
     tmpDoc = iter->document();
     if (tmpDoc)
     {
      CString strFile(tmpDoc->fileName());
      if(m_strFileName.CompareNoCase(strFile) == 0)
      {
       es = acDocManager->setCurDocument(tmpDoc, AcAp::kWrite);//切换为活动文档
       if(Acad::eOk != es)
       {
        delete iter;
        throw MESSAGE(es);
       }
       es = tmpDoc->database()->saveAs(m_strFileName);
       if(Acad::eOk != es)
       {
        delete iter;
        throw MESSAGE(es);
       }
       es = acDocManager->unlockDocument(tmpDoc);
       if(Acad::eOk != es)
       {
        delete iter;
        throw MESSAGE(es);
       }
       es = acDocManager->setCurDocument(pCurDoc);//切换到原来的活动文档
       if(Acad::eOk != es)
       {
        delete iter;
        throw MESSAGE(es);
       }
       delete iter;
       iter = NULL;
       return S_OK;
      }
     }
    }
    if(iter != NULL)
    {
     delete iter;
     iter = NULL;
    }
   }
            //如果当前操作的文件没有被ACAD打开,直接保存
   es = pWorkDb->saveAs(m_strFileName);
   if(Acad::eOk != es)
    throw MESSAGE(es);
  }
 }
 catch(const Acad::ErrorStatus)
 {
   CString strErr = L"Fialed To open the " ;
   return Error(strErr + m_strFileName,IID_ITHDatabase,E_FAIL);
 }

 return S_OK;
}
时间: 2024-08-30 00:49:38

arx对正在操作的文件进行保存的相关文章

C/C++关于文件的读写操作以及文件的打开和保存

通过近来的学习,总结一下关于文件的读写操作以及文件的打开和保存的方法. 一.文件的读写操作: (1)C语言对文件的读写操作 在C语言中,对文件的读写操作是用FILE结构体和常用的对文件操作的函数实现的,下面总结一下C语言中对文件操作的常用函数: fopen()   打开以文件名指定的文件 fwrite()  写文件 fread()  读文件 fseek()  移动文件的指针到新的位置通过该函数的参数设定的偏移量和初始位置 rewind()  移动文件的指针到文件流的开始位置,在通常情况下可用fs

C++MFC编程笔记day07 MFC的文件操作、序列化和保存

一 MFC的文件操作 1 相关类 CFile类-封装了文件句柄以及操作文件的API函数. CFileFind类-提供文件查找功能. 2 CFile类的使用 2.1 打开或者新建文件 CFile::Open 2.2 文件读写 注意:1 文件指针位置 2 异常处理 CFile::Write CFile::Read CFile::SeekToBegin 2.3 关闭文件 CFile::Close 2.4 设置/获取文件属性 CFile::SetStatus/GetStatus 3 CFileFind类

java使用POI操作excel文件,实现批量导出,和导入

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

C#操作txt文件

c# 操作txt文件 # 操作txt文件 c#创建文本 private const string FILE_NAME = "ErroLog.txt"; public static void WriteFile(string str) ...{ StreamWriter sr; if (File.Exists(FILE_NAME)) //如果文件存在,则创建File.AppendText对象 ...{ sr = File.AppendText(FILE_NAME); } else //如

【Android先进】如何使用数据文件来保存程序

在程序,有许多方法来存储和检索数据,本文,它描述了如何使用文件系统来保存数据编程和读取操作 我直接写了一个帮助类,进行文件的写入和读取操作 /** * 用于在文件里保存程序数据 * * @author zhaokaiqiang * */ public class FileHelper { private static final String TAG = "FileHelper"; private Context mContext; FileHelper(Context _mConte

[转]C#操作INI文件

在很多的程序中,我们都会看到有以.ini为后缀名的文件,这个文件可以很方便的对程序配置的一些信息进行设置和读取,比如说我们在做一个程序后台登陆的时候,需要自动登录或者是远程配置数据库连接,及保存密码设置等等(在Winform程序中),若在ASP.NET程序中有另外的解决方法,此C#操作INI文件的文章仅在winform程序中进行写入和读取操作. 为了方便起见,现在以一个简单的小实例来对C#操作INI文件进行讲解: 窗体的大致布局如下 当点击写入按钮的时候就会把文本框中输入的值写入到INI文件中,

Java操作XML文件 dom4j 篇

在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileWriter; //工具包 import java.util.Iterator; import java.util.List; //dom4j包 import org.dom

.Net常用技巧_操作xml文件教程(插入节点、修改、删除)

已知有一个XML文件(bookstore.xml)如下:     <?xml   version="1.0"   encoding="gb2312"?>     <bookstore>         <book   genre="fantasy"   ISBN="2-3631-4">             <title>Oberon's   Legacy</title&

VB操作EXCEL文件大全

Private Sub writeToExcel(strTmp1() As String, colTmp1 As Collection) ' '    Dim tmp1 Dim i1 As Integer, intCol As Integer, intRow As Integer Dim xlApp As New Excel.Application Dim xlBook As New Excel.Workbook Dim xlSheet As New Excel.Worksheet Dim st