CAD-страница НП | Статьи | English
Н.Н.Полещук. AutoCAD 2010 .NET API: eFileSharingViolation в Database.SaveAs
Ссылка на блог Д.Бергмарка с этой темой
Если открыть справку по AutoCAD 2010 .NET (в составе документации к ObjectARX 2010) вы увидите,
класс Autodesk.AutoCAD.DatabaseServices.Database имеет метод
SaveAs, который представлен тремя перегруженными функциями:
Однако использование последней из них является проблематичным (в 2009 и других версиях все нормально).
Она не работает, если вы пытаетесь сохранить файл, который был открыт (не создан!) в данной сессии
AutoCAD.
Построим пример. Определите команду SaveDr, которая сохраняет текущий чертеж с тем же именем и в той версии DWG-формата с помощью функции Database.SaveAs (string, DwgVersion).
Используя мастер ObjectARX для VB-приложений с управляемым кодом, создайте новый проект Visual Basic.NET с названием VbSaveYourDrawing и замените текст файла Command.vb на следующий:
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Runtime
Public Class Commands
End Class
Выполните сборку версии Release для проекта VbSaveYourDrawing.
Далее:
1. Запустите AutoCAD 2010 и откройте какой-нибудь существующий DWG-файл.
2. Введите команду NETLOAD и загрузите с ее помощью файл VbSaveYourDrawing.dll (обычно он находится
в папке VbSaveYourDrawing\VbSaveYourDrawing\bin\Release).
3. Выполните команду SaveDr.
4. Программа откроет окно MessageBox (Рис.1).
Рисунок 1
5. Щелкните Да.Рисунок 2
Таким образом, мы не можем сохранить текущий чертеж при некоторых обстоятельствах. Вот почему в AutoCAD .NET Developer's Guide вместо этого используется более надежный вариант acDoc.Database.SaveAs(acDoc.Name, True, DwgVersion.Current, acDoc.Database.SecurityParameters).
Проект с текстом примера можно скачать отсюда.
Такая же проблема присутствует и в C#.