Проблемы при сохранении документа

Автор Тема: Проблемы при сохранении документа  (Прочитано 6409 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AlexxАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Столкнулся с проблемой сохранения документа. При попытке выполнить Application.DocumentManager.MdiActiveDocument.Database.Save() возникает ошибка eFileInternalErr.
При попытке выполнить Application.DocumentManager.MdiActiveDocument.Database.SaveAs() возникает ошибка eFileSharingViolation. Погуглил это дело - проблема встречается повсеместно. Варианты решения предлагают разные: от выполнения QSAVE до вызова Save() у COM-объекта Document. Возможно, кто-нибудь знает более "правильное" решение?

P.S. Application.DocumentManager.MdiActiveDocument.CloseAndSave() - не подходит, т.к. мне нужно чтобы документ оставался открытым.

Отмечено как Решение Alexx 05-10-2015, 11:32:39

Оффлайн AlexxАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Re: Проблемы при сохранении документа
« Ответ #1 : 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-файл.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Проблемы при сохранении документа
« Ответ #2 : 05-10-2015, 11:53:57 »
При попытке выполнить Application.DocumentManager.MdiActiveDocument.Database.SaveAs() возникает ошибка eFileSharingViolation. Погуглил это дело - проблема встречается повсеместно. Варианты решения предлагают разные: от выполнения QSAVE до вызова Save() у COM-объекта Document. Возможно, кто-нибудь знает более "правильное" решение?
Я показывал здесь, как это можно сделать без COM (см. раздел "Внимание!").

Оффлайн AlexxАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Re: Проблемы при сохранении документа
« Ответ #3 : 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 

Или я что-то не так понял?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Проблемы при сохранении документа
« Ответ #4 : 05-10-2015, 12:12:58 »
Я только не очень понял зачем в данном случае получать DWGTITLED,
Выше я указал, что решение проблемы обозначено в разделе "Внимание!". Там не используется DWGTITLED.