对 .dwg 文件使用增量保存

处理大型 .dwg 文件时,有时完全保存会很慢。Teigha 为 .dwg 文件提供了一个新的增量文件保存功能,它只保存修改过的数据,这对于没有大量修改的大型文件来说比完全保存更快。

Teigha 提供了两种执行增量文件保存的方法:

void OdDbDatabase::save(const OdString& filename, bool saveThumbnailImage = false);
void OdDbDatabase::save(OdStreamBuf* pStreamBuf, bool saveThumbnailImage = false);

使用绝对路径进行增量保存

在大多数情况下,您可以使用 OdDbDatabase::save() 方法增量保存当前的 .dwg 数据库,该方法将路径作为第一个参数。调用如下:

pDb->save(targetPath);

第一个参数是目标文件的绝对路径。该路径应与您要保存的数据库中获取的另一个路径相同。如果绝对路径不匹配,该方法将执行完全保存。第二个参数控制缩略图图像是否保存到文件中。

文件仅在以下条件下增量保存:

  • 文件是 .dwg 文件
  • 目标文件的绝对路径与上述原始路径相同
  • 文件以前已保存
  • 文件的数据库版本等于 OdDb::kDHL_CURRENT(最新格式)

此外,该方法的行为取决于 ISAVEPERCENT 系统变量的值。ISAVEPERCENT 值是文件中允许的浪费空间的百分比。如果 ISAVEPERCENT 等于 0,该方法将执行完全保存。否则,它按以下方式工作:

  • 如果实际浪费空间的百分比小于或等于 ISAVEPERCENT,该方法将执行增量文件保存。
  • 如果实际浪费空间的百分比大于 ISAVEPERCENT,该方法将执行完全保存。

建议在使用 SAVE 命令执行文件保存操作时使用 OdDbDatabase::save(…) 方法。但对于 SAVEAS,您应该使用 OdDbDatabase::writeFile(…) 方法。您可以在实现自己的应用程序时分离相应的调用。

另请参阅 OdaMfcApp 示例应用程序,了解如何使用增量文件保存:Core\Examples\win\OdaMfcApp\OdaMfcAppDoc.cpp

使用 OdStreamBuf 进行增量保存

如果您想将数据库增量保存到临时文件,您应该使用 OdDbDatabase::save(…) 方法的第二个版本,该版本接受指向 OdStreamBuf 的指针。

您可能需要此方法通过使用原始文件的副本更安全地保存文件。

例如,您可以使用以下步骤处理文件。

当文件处理开始时,将原始文件复制到临时文件:

OdString cmdString("copy \"" + targetPath + "\" \"" + pathToTemp + "\"");
system(cmdString);

要将当前打开的数据库(从原始文件读取)保存到您创建的作为副本的临时文件,请打开临时文件的流以进行写入。

然后调用 OdDbDatabase::save() 方法,将指向流的指针作为第一个参数:

{
OdStreamBufPtr pTempFile = odSystemServices()->createFile(pathToTemp, Oda::kFileWrite, Oda::kShareDenyReadWrite, Oda::kOpenAlways);

pDb->save(pTempFile, true);
}

成功保存后,请确保临时文件流已关闭,然后如果需要,您可以用包含数据库实际状态的临时文件替换原始文件:

cmdString = "copy \"" + pathToTemp + "\" \"" + targetPath + "\"";
system(cmdString);

临时文件不再需要后,您可以将其删除。

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用