Расположение документа

Автор Тема: Расположение документа  (Прочитано 13365 раз)

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

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

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Расположение документа
« : 25-02-2015, 11:51:00 »
Доброго времени суток, уважаемые форумчане! Помогите пожалуйста разобраться с таким вот вопросом:
Если зайти в свойства любого документа (используя ПКМ), то на вкладке "Общие" есть свойство "Расположение". Можно ли обратиться в этому свойству программно? Если сформулировать по-другому: мне необходимо получить название папки, в которой хранится документ.

П.С. Я понимаю, что это можно сделать чем-то вроде: "возьмем полный путь файла и вычтем из него название файла", но мне бы хотелось. чтобы в определении названия папки не участвовало каких-либо переменных (например название файла), потому как, при изменении последнего, строка кода будет требовать корректировки.
В программировании я новичок...но ненадолго! ;)

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

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расположение документа
« Ответ #1 : 25-02-2015, 14:52:09 »
Не думаю, что в Inventor API есть прямое свойство для получения каталога, в котором содержится файл, но зато есть свойство Document.FullFileName из которого достаточно просто получить каталог. Достаточно отсекать с конца строки по одному символу пока "не упрешься" в "\" или в ":" или в "/". Всё что останется и будет "папка, в которой хранится документ".
« Последнее редактирование: 25-02-2015, 15:11:13 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Re: Расположение документа
« Ответ #2 : 25-02-2015, 15:13:31 »
на вкладке "Общие" есть свойство "Расположение". Можно ли обратиться в этому свойству программно?
Это не свойство, программно обратиться не получится. Вот один из вариантов получения папки файла:
Код - vb.net [Выбрать]
  1. Dim nameDoc As String = m_inventorApplication.ActiveDocument.FullFileName
  2. Dim patchDoc As String = nameDoc.Remove(nameDoc.LastIndexOf("\"), nameDoc.Length - nameDoc.LastIndexOf("\"))
В iLogic Инвентора есть такая фича: ThisDoc.Path

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

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расположение документа
« Ответ #3 : 25-02-2015, 15:24:58 »
Алексей Романов
IMHO не совсем правильно. В случае если файл находится в корневом каталоге, то путь к каталогу должен быть не "X:" , а "X:\". Во всех остальных случаях без обратного слэша на конце: "X:\Directory1\Directory2\...\DirectoryN"



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

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Re: Расположение документа
« Ответ #4 : 25-02-2015, 16:09:20 »
IMHO не совсем правильно.
Я в курсе. При работе в АИ расположение файлов в корне диска это нонсенс, работа ведется с проектами, а там без папок не обойтись. Если кому приспичит, то сделать проверку и дописать слэш не проблема. При формировании полного пути файла слэш все равно приходится дописывать (если формирования ведется не средствами FSO)...

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Расположение документа
« Ответ #5 : 25-02-2015, 16:55:07 »
Спасибо за ваши ответы.
Прокопался два часа, так и не нашел аналога метода "LastIndexOf" для VBA. Алексей, вы не можете мне с этим помочь?
В программировании я новичок...но ненадолго! ;)

Отмечено как Решение R.I.Chernov 25-02-2015, 17:23:32

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Re: Расположение документа
« Ответ #6 : 25-02-2015, 17:18:33 »
Алексей, вы не можете мне с этим помочь?
Без проблем, хотел же еще как вариант привести...
Код - Visual Basic [Выбрать]
  1. Dim asDoc As String: asDoc = ThisApplication.ActiveDocument.FullFileName
  2. Dim patchDoc As String: patchDoc = Left(asDoc, InStrRev(asDoc, "\") - 1)

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Расположение документа
« Ответ #7 : 25-02-2015, 17:23:27 »
Спасибо, Алексей!
Это смешно, но спустя еще десять минут я нашел ответ, но быстрее вас выложить не успел :)

П.С. В очередной раз убедился, какой я еще зеленый - не знал, что в VBA можно в одну строку объявить переменную и задать ей значение... :)
В программировании я новичок...но ненадолго! ;)

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1111
  • Карма: 173
Re: Расположение документа
« Ответ #8 : 25-02-2015, 17:47:02 »
Нннууу... Как бы не совсем :) Обрати внимание на символ ":" - фактически это разделение двух или более разных операторов. В VBA полно записей вида:
Код - Visual Basic [Выбрать]
  1. Dim arPt(2) as Double
  2. arPt(0) = 0# : arPt(1)= 1# : arPt(2) = 3#
Сам я в свое время на этом хорошо мозг поломал...
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Расположение документа
« Ответ #9 : 25-02-2015, 17:55:43 »
Спасибо!  Я тут уже успел поэкспериментировать и написать тьму всего в одну строку... :) Подскажите пожалуйста, правильно ли я понял, разделение операторов двоеточием по сути аналогично записи с новой строки?
П.С. Если не сложно, просветите пожалуйста, что за значение такое "arPt(0) = 0#" ? Что означает решетка?
В программировании я новичок...но ненадолго! ;)

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

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расположение документа
« Ответ #10 : 25-02-2015, 17:58:48 »
правильно ли я понял, разделение операторов двоеточием по сути аналогично записи с новой строки?
Да
Если не сложно, просветите пожалуйста, что за значение такое "arPt(0) = 0#"
Нулевому элементу массива arPt присваивается длинный плавающий (Double) нуль.
https://msdn.microsoft.com/en-us/library/s9cz43ek.aspx
« Последнее редактирование: 25-02-2015, 18:12:09 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Расположение документа
« Ответ #11 : 26-02-2015, 12:21:47 »
Спасибо, Александр. Почитал сегодня и, честно говоря, так и не понял в итоге, каким образом используются данные символы. В смысле как ими манипулировать, и в каких именно ситуациях они нужны и полезны. Ну например в вашем примере вы же объявляете массив как double, что тогда дает символ решетки?
Как появится свободное время, придется в этом разобраться :)

П.С. Вот та же статья на русском https://msdn.microsoft.com/ru-ru/library/s9cz43ek.aspx
В программировании я новичок...но ненадолго! ;)

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

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расположение документа
« Ответ #12 : 26-02-2015, 12:25:24 »
Ну например в вашем примере вы же объявляете массив как double, что тогда дает символ решетки?
В принципе он необязателен в этом случае. Можно было написать и 0.0
Обязателен символ в том случае когда тип не определен и тип значения по-умолчанию не совпадает с тем, которое необходимо по смыслу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Расположение документа
« Ответ #13 : 26-02-2015, 12:27:58 »
Можно было написать и 0.0
А что мешает написать просто 0, без дробной части? Я может что-то не так делаю, но объявленные массивы double корректно работали при присвоении их членам по сути целых значений. Я для себя понял, что подразумевается, что дробная часть равна нулю. Или я ошибаюсь?
В программировании я новичок...но ненадолго! ;)

Оффлайн brigval

  • ADN Club
  • Сообщений: 17
  • Карма: 0
  • Подпись под аватаром
Re: Расположение документа
« Ответ #14 : 26-02-2015, 12:32:01 »
Алексей, вы не можете мне с этим помочь?
Без проблем, хотел же еще как вариант привести...
Код - Visual Basic [Выбрать]
  1. Dim asDoc As String: asDoc = ThisApplication.ActiveDocument.FullFileName
  2. Dim patchDoc As String: patchDoc = Left(asDoc, InStrRev(asDoc, "\") - 1)

Иногда удобно путь преобразовать в массив с разделителем "\". И обработать его.