Как правильно получать всегда путь к файлу

Автор Тема: Как правильно получать всегда путь к файлу  (Прочитано 11623 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Подскажите как правильно получать название и путь к файлу.
Хочу перенести с чертежа где много листов каждый лист в отдельный файл, вроде переносится но проблема в имени файла, то появляется в папке где основной чертеж то создается где не знаю.
Создаю чертежи в такой последовательности
1. Выбираю рамкой границы блока
2. Создаю чертеж
3. Копирую что выбрано
4. Сохраняю закрываю
В editor вывожу путь он правильный показывает, при сохранении указываю этот же путь.
перебробовал все ссылки ниже, везде результат одинаковый, иногда есть иногда нет, думал из за того что не сохранен файл, но в папке Temp тоже нет.Я  в отчаянии. Что делать подскажите?


https://www.keanw.com/2008/03/getting-the-ful.html

https://forums.autodesk.com/t5/net/current-drawing-location-path/td-p/3008548

https://adndevblog.typepad.com/autocad/2013/02/quick-tip-get-the-dwg-file-path-from-acdbdatabase-object.html

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Yusuf,
И как ты получаешь путь к файлу? Код где?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
И как ты получаешь путь к файлу? Код где?
разные способы пробовал

Код - C# [Выбрать]
  1.  Document doc =
  2.  
  3.         Application.DocumentManager.MdiActiveDocument;
  4.  
  5.       HostApplicationServices hs =
  6.  
  7.         HostApplicationServices.Current;
  8.  
  9.       string path =
  10.  
  11.         hs.FindFile(
  12.  
  13.           doc.Name,
  14.  
  15.           doc.Database,
  16.  
  17.           FindFileHint.Default
  18.  
  19.         );

это последнее

Код - C# [Выбрать]
  1.                     //HostApplicationServices hs = HostApplicationServices.Current;
  2.                     //string path = Application.GetSystemVariable("DWGPREFIX");
  3.                         //hs.FindFile(doc.Name, doc.Database, FindFileHint.Default);
  4.                     string path = Path.GetFullPath(db.OriginalFileName);
  5.                     string createdwgFolder = Path.GetFileNameWithoutExtension(db.OriginalFileName);
  6.  
  7.                     string folderdwg = Path.GetDirectoryName(db.OriginalFileName);
  8.                     string dwgFilename = Path.Combine(folderdwg, fileName+".dwg");
  9.  



Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Yusuf,
А Document.Name не пробовал? Но если чертеж новый и еще ни разу не сохранялся (т.е когда Document.IsNamedDrawing == false) - ничего не выйдет. Файл всегда нужно сначала сохранить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Yusuf,
А Document.Name не пробовал? Но если чертеж новый и еще ни разу не сохранялся (т.е когда Document.IsNamedDrawing == false) - ничего не выйдет. Файл всегда нужно сначала сохранить.
пробовал, та же ситуация была, главный документ не новый, из него копирую и создаю новые и даю путь со старого + название файла из атрибута блока

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Yusuf,
А Document.Name не пробовал? Но если чертеж новый и еще ни разу не сохранялся (т.е когда Document.IsNamedDrawing == false) - ничего не выйдет. Файл всегда нужно сначала сохранить.
пробовал, та же ситуация была, главный документ не новый, из него копирую и создаю новые и даю путь со старого + название файла из атрибута блока
Document.Name тебе давал правильный путь к файлу "главного документа"?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Document.Name тебе давал правильный путь к файлу "главного документа"?
да давал и сейчас правильный путь, знаете что только что заметил мистика какая то, если гружу netload не создается файл, процесс идет но не создается даже сообщает что создан, а если запускаю команду из плагина Вильдар, за что ему спасибо, работает, создается

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Document.Name тебе давал правильный путь к файлу "главного документа"?
да давал и сейчас правильный путь, знаете что только что заметил мистика какая то, если гружу netload не создается файл, процесс идет но не создается даже сообщает что создан, а если запускаю команду из плагина Вильдар, за что ему спасибо, работает, создается

Ничего не понял.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Ничего не понял.
Пользуюсь плагином от Вильдара который по ссылке
https://adn-cis.org/forum/index.php?topic=10129.msg46033#msg46033

через него можно загружать библиотеки и потом выходит список команд, если оттуда запускать все работает, а если netload-ом гружу, весь процесс идет но файл не появляется в нужной папке.
Так вот только что опять проверил удалил из этого плагина все dll загрузил в автокад, не работает, запустил с плагина все файлы создаются.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Yusuf,
Откажись от плагина Вильдара и проверяй нормально. Есть куча побочных явлений, о которых ни ты, ни я, ни Вильдар не догадываемся. Тем более что твоя сборка будет работать в совсем других условиях.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Откажись от плагина Вильдара и проверяй нормально. Есть куча побочных явлений, о которых ни ты, ни я, ни Вильдар не догадываемся. Тем более что твоя сборка будет работать в совсем других условиях.
как теперь чинить убрал bundle плагина, гружу в autocad стандартным способом все равно не работает

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
как теперь чинить убрал bundle плагина, гружу в autocad стандартным способом все равно не работает
Ищи ошибку в своей программе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
как теперь чинить убрал bundle плагина, гружу в autocad стандартным способом все равно не работает
Ищи ошибку в своей программе.
нашел, как говорится утро вечера мудренее, т.е не нашел а просто добавил Database.SaveAs раньше просто стоял Document.CloseAndSave, а до этого столько времени потратил на варианты поиска пути документа.
файл закрываю потому что активным должным быть "главный" документ для последующей итерации, может надо как то по другому обращаться чтобы всегда знать какой документ активировать, а то после закрытия нового обращается опять Document.Database, а если файл случайно не закроется выскочит исключение, поэтому боюсь немного никаких подводных камней нет случайно в таком коде?
Код - C# [Выбрать]
  1.             acDbNewDoc.SaveAs(dwgFilename, DwgVersion.Current);
  2.             //Application.ShowAlertDialog(Active.Document.Name);
  3.             acNewDoc.CloseAndSave(dwgFilename);
  4.  

и еще теперь не зуммируется, до этого даже при создании показывал зуммировал к границам работал, а теперь почему новый файл не создается а активным остается старый почему то,  ведь только добавил строку
Код - C# [Выбрать]
  1. acDbNewDoc.SaveAs(dwgFilename, DwgVersion.Current);

как исправить привожу код метода?

Код - C# [Выбрать]
  1.         public void CopyObjectsBetweenDatabases(ObjectIdCollection acObjIdColl, string dwgFilename)
  2.         {
  3.             //ObjectIdCollection acObjIdColl = new ObjectIdCollection();
  4.             // Get the current document and database
  5.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  6.             Database acCurDb = acDoc.Database;
  7.            
  8.             // Change the file and path to match a drawing template on your workstation
  9.             string sLocalRoot = Application.GetSystemVariable("LOCALROOTPREFIX") as string;
  10.             string sTemplatePath = sLocalRoot + "Template\\acadiso.dwt";
  11.             // Create a new drawing to copy the objects to
  12.             DocumentCollection acDocMgr = Application.DocumentManager;
  13.             Document acNewDoc = acDocMgr.Add(sTemplatePath);
  14.             Database acDbNewDoc = acNewDoc.Database;
  15.             // Lock the new document
  16.             using (DocumentLock acLckDoc = acNewDoc.LockDocument())
  17.             {
  18.                 // Start a transaction in the new database
  19.                 using (Transaction acTrans = acDbNewDoc.TransactionManager.StartTransaction())
  20.                 {
  21.                     // Open the Block table for read
  22.                     BlockTable acBlkTblNewDoc;
  23.                     acBlkTblNewDoc = acTrans.GetObject(acDbNewDoc.BlockTableId,
  24.                                                        OpenMode.ForRead) as BlockTable;
  25.                     // Open the Block table record Model space for read
  26.                     BlockTableRecord acBlkTblRecNewDoc;
  27.                     acBlkTblRecNewDoc = acTrans.GetObject(acBlkTblNewDoc[BlockTableRecord.ModelSpace],
  28.                                                         OpenMode.ForRead) as BlockTableRecord;
  29.                     // Clone the objects to the new database
  30.                     IdMapping acIdMap = new IdMapping();
  31.                     acCurDb.WblockCloneObjects(acObjIdColl, acBlkTblRecNewDoc.ObjectId, acIdMap,
  32.                                                DuplicateRecordCloning.Ignore, false);
  33.                     ZoomExtCmd();
  34.                     // Save the copied objects to the database
  35.                     acTrans.Commit();
  36.                 }
  37.                 // Unlock the document
  38.             }
  39.             // Set the new document current
  40.             //acDocMgr.MdiActiveDocument = acNewDoc;
  41.             dynamic acadApp = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication;
  42.             acadApp.ZoomExtents();
  43.             //Active.Document.SendStringToExecute("_.zoom _all ", true, true, false);
  44.  
  45.             acDbNewDoc.SaveAs(dwgFilename, DwgVersion.Current);
  46.             acNewDoc.CloseAndSave(dwgFilename);
  47.  
  48.         }
  49.  
  50.         public void ZoomExtCmd()
  51.         {
  52.             var ed = Application.DocumentManager.MdiActiveDocument.Editor;
  53.             ed.Command("_.zoom", "_extents");
  54.         }
  55.  
« Последнее редактирование: 25-11-2020, 08:51:24 от Yusuf »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Объясни мне зачем ты создаёшь новый документ, если можно просто создать новую базу (Database), скопировать в неё всё что нужно и сохранить. И даже на экране ничего мелькать не будет...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Объясни мне зачем ты создаёшь новый документ, если можно просто создать новую базу (Database), скопировать в неё всё что нужно и сохранить. И даже на экране ничего мелькать не будет...
Александр Наумович подскажите как это сделать, замучился уже
я брал отсюда http://docs.autodesk.com/ACD/2011/ENU/filesMDG/WS1a9193826455f5ff2566ffd511ff6f8c7ca-3f78.htm , других примеров не нашел

если правильно понял можно так https://spiderinnet1.typepad.com/blog/2013/03/autocad-net-safely-create-new-database-and-saveas.html через итерацию, вставлям и сохраняем?