Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Alexx от 05-10-2015, 10:51:54

Название: Проблемы при сохранении документа
Отправлено: Alexx от 05-10-2015, 10:51:54
Столкнулся с проблемой сохранения документа. При попытке выполнить Application.DocumentManager.MdiActiveDocument.Database.Save() возникает ошибка eFileInternalErr.
При попытке выполнить Application.DocumentManager.MdiActiveDocument.Database.SaveAs() возникает ошибка eFileSharingViolation. Погуглил это дело - проблема встречается повсеместно. Варианты решения предлагают разные: от выполнения QSAVE до вызова Save() у COM-объекта Document. Возможно, кто-нибудь знает более "правильное" решение?

P.S. Application.DocumentManager.MdiActiveDocument.CloseAndSave() - не подходит, т.к. мне нужно чтобы документ оставался открытым.
Название: Re: Проблемы при сохранении документа
Отправлено: Alexx от 05-10-2015, 11:32:33
Разобрался. Оказалось можно сделать так:

Код - C# [Выбрать]
  1.  
  2. Document doc = Application.DocumentManager.MdiActiveDocument;
  3. string fileName = Application.DocumentManager.MdiActiveDocument.Databas.FileName;
  4. SecurityParameters secParams =  Application.DocumentManager.MdiActiveDocument.Database.SecurityParameters;
  5.  
  6. doc.Database.SaveAs(
  7.     fileName,    // Имя файла
  8.     true,    // Создание bak-файла и "change document name in AutoCAD" - хз что имеется в виду
  9.     DwgVersion.Current,    // Текущая версия DWG
  10.     secParams    // Параметры безопасности
  11. );
  12.  

по результату получается аналог работы с COM-объектом Document:

Код - C# [Выбрать]
  1. dynamic acadDoc = Application.DocumentManager.MdiActiveDocument.GetAcadDocument();
  2. acadDoc.Save();
  3.  

т.е. создается bak-файл.
Название: Re: Проблемы при сохранении документа
Отправлено: Андрей Бушман от 05-10-2015, 11:53:57
При попытке выполнить Application.DocumentManager.MdiActiveDocument.Database.SaveAs() возникает ошибка eFileSharingViolation. Погуглил это дело - проблема встречается повсеместно. Варианты решения предлагают разные: от выполнения QSAVE до вызова Save() у COM-объекта Document. Возможно, кто-нибудь знает более "правильное" решение?
Я показывал здесь (https://sites.google.com/site/bushmansnetlaboratory/translate-manual/upravlenie-sredoj-autocad/sozdanie-otkrytie-sohranenie-i-zakrytie-certezej/sohranenie-i-zakrytie-certeza), как это можно сделать без COM (см. раздел "Внимание!").
Название: Re: Проблемы при сохранении документа
Отправлено: Alexx от 05-10-2015, 12:07:54
Андрей, спасибо!

Я только не очень понял зачем в данном случае получать DWGTITLED, если при использовании метода:

Database.SaveAs(string fileName , bool bBakAndRename, DwgVersion version, Autodesk.AutoCAD.DatabaseServices.SecurityParameters security)

документ и так будет переименован...

По крайней мере в документации описание параметров такое:

string fileName  - file name or URL to write database out to 
bool bBakAndRename  - bool indicating whether or not to create a .bak file and change document name in AutoCAD 
DwgVersion version  - dwg version to which to save the file 
Autodesk.AutoCAD.DatabaseServices.SecurityParameters security  - a SecurityParameters structure 

Или я что-то не так понял?
Название: Re: Проблемы при сохранении документа
Отправлено: Андрей Бушман от 05-10-2015, 12:12:58
Я только не очень понял зачем в данном случае получать DWGTITLED,
Выше я указал, что решение проблемы обозначено в разделе "Внимание!". Там не используется DWGTITLED.