NanoCAD: как гарантированно узнать папку текущего открытого файла ?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > NanoCAD: как гарантированно узнать папку текущего открытого файла ?

NanoCAD: как гарантированно узнать папку текущего открытого файла ?

Ответ
Поиск в этой теме
Непрочитано 21.03.2024, 10:23 #1
NanoCAD: как гарантированно узнать папку текущего открытого файла ?
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 616

Всем привет!

Забавный вопрос - не правда ли?

(getvar "dwgprefix") - чем не устаивает? :-)

Не спешите.

Если запустить nanoCAD + открыть файл из *.bat-файла командой типа:

start "DREAM-START" "C:\Program Files\Nanosoft\nanoCAD x64 23.1\nCad.exe" "0-str2.dwg"

То nanoCAD запустится и файл откроется, но (getvar "dwgprefix") выдаст "0-str2.dwg".

Т.е. результат (getvar "dwgprefix") = (getvar "dwgname")

Вопрос:

а) Как можно гарантированно получить путь папки файла альтернативно, т.е. не читая "dwgprefix"

или

б) Какой строкой *.bat-файла можно запустить nanoCAD + открыть указанный файл,
чтобы в "dwgprefix" был-таки путь папки, а не имя файла.

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

start "DREAM-START" "C:\Program Files\Nanosoft\nanoCAD x64 23.1\nCad.exe" "C:\Путь\0-str2.dwg"

то этот C:\Путь\ попадёт в "dwgprefix" ... но это опять же "частный случай",
хотелось бы решения "в общем виде".

И да - в AutoCAD'е этого глюка нет.
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 21.03.2024 в 11:36.
Просмотров: 2446
 
Непрочитано 21.03.2024, 13:45
#2
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Как можно гарантированно получить путь папки файла альтернативно, т.е. не читая "dwgprefix"
никак
т.е. если ты запустил ком строку в каталоге с 0-str2.dwg
и запустил нану "C:\Program Files\Nanosoft\nanoCAD x64 23.1\nCad.exe" "C:\Путь\0-str2.dwg"
то нана не знает полный путь...
проверить легко, посмотреть Файл-свойство чертежа..
Расположение будет "\"
((
а вот на .NET легко
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 21.03.2024 в 14:26.
doctorraz вне форума  
 
Автор темы   Непрочитано 21.03.2024, 13:57
#3
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Похоже, что всё-таки "знает", т.к. если сделать команду
"Сохрани как...", nanoCAD услужливо откроет именно ту папку,
где лежит открытый файл DWG.

Причём *.bat-файл можно запускать из любой папки /проверил/,
прописывая к нему полный путь доступа, перед этим попрыгав
менеджером по разным папкам, чтобы "текущей" в системе была
точно "другая" папка.

Не, "сбить с толку" не получается. Оно "знает", где этот файл лежит.

----- добавлено через ~4 мин. -----
Цитата:
и запустил нану "C:\Program Files\Nanosoft\nanoCAD x64 23.1\nCad.exe" "C:\Путь\0-str2.dwg"
то нана не знает полный путь...
Опять же "знает" и спокойно раскладывает "C:\Путь\0-str2.dwg" по двум системным
переменным - dwgprefix и dwgname.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 21.03.2024, 14:23
#4
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Код:
[Выделить все]
 
Document doc = Application.DocumentManager.MdiActiveDocument;
string sFilName = doc.Name;
хех возвращает только имя файла(((

если просто save, тоже пересохранит))
----------------
всежэж он не знает полный путь и сохраняет тупо по относительному... средствами ОС
то что на
(getvar "dwgprefix")
возвращает имя файла, имха бага
-------------
должен вернуть
\\
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 21.03.2024 в 14:33.
doctorraz вне форума  
 
Автор темы   Непрочитано 21.03.2024, 14:59
#5
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


И (vla-get-path ...) - тоже только имя.

Бага-бяка. :-(
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 21.03.2024, 15:21
#6
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


так вернет директорию
Код:
[Выделить все]
 string curDir=System.IO.Directory.GetCurrentDirectory();
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 21.03.2024, 15:28
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от doctorraz Посмотреть сообщение
Document doc = Application.DocumentManager.MdiActiveDocument;2string sFilName = doc.Name;
а если через документ Document.Database.FileName попробовать?
Сергей812 вне форума  
 
Непрочитано 21.03.2024, 15:50
#8
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


string value = HostApplicationServices.WorkingDatabase.Filename
Вернет имя файла с расширением
Offtop: Нанодевы не подумали, что пытливые пользователи будут открывать файлы без пути))

----- добавлено через ~11 мин. -----
батник меняет рабочий каталог наны
и
Код:
[Выделить все]
 string value = HostApplicationServices.WorkingDatabase.Filename ; //->0-str2.dwg
bool isFilExist = File.Exists(value );// ->true
----- добавлено через ~2 мин. -----
Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
б) Какой строкой *.bat-файла можно запустить nanoCAD + открыть указанный файл,
чтобы в "dwgprefix" был-таки путь папки, а не имя файла.
с полным путем
типа так
*.bat
Код:
[Выделить все]
FOR /r %%A IN (*dwg) DO ( 
echo Processing %%A
rem
"C:\Program Files\Nanosoft\nanoCAD x64 22.0\nCadS.exe" "%%A" -b nSPDSComp -r SPDS -a nanoCAD_x64_SPDS_22.0 -invisible -k "c:\BAT\cleanNano\cleanNano.scr" -oleid "{E42052C9-250A-483B-B353-E0C90517FD7F}"
)
ну и для перебора файлов нанодевы таки придумали BATCHPROCESS, просто надо научиться им пользоваться

перед запуском пакетной обработки выполнить этот *.vbs
Код:
[Выделить все]
 
Set objApp = GetObject(, "nanoCAD.Application")
If objApp.Visible = False Then
    objApp.Visible = True
Else
    objApp.Visible = False
    End If
а по окончании еще раз
PS действует на первый запущенный нана
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 21.03.2024 в 16:11.
doctorraz вне форума  
 
Автор темы   Непрочитано 21.03.2024, 16:20
#9
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Цитата:
ну и для перебора файлов нанодевы таки придумали BATCHPROCESS, просто надо научиться им пользоваться
Это не для перебора. :-)

Просто у меня на Enter назначено открытие DWG в Автокаде, вот и сделал
маленький батник, чтобы быстро открывать в нане "отладочный файл" из
"текущей папки". И тут же получил багу. :-)

А когда "мельтешит окошками", то в асаде даже хорошо. Юзер запустил и
сидит, картинки смотрит, как оно там рисует - жизни радуется.
Ну у что, что подольше.

Затрат времени на рубль, удовольствия - на все сто. :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 21.03.2024, 16:25
#10
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
А когда "мельтешит окошками", то в асаде даже хорошо.
можно жэж другим делом заняться... косынку разложить)))

Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
батник, чтобы быстро открывать в нане "отладочный файл" из
"текущей папки". И тут же получил багу. :-)
полный путь передавай
Offtop: в клубе разработчиков тишина, абонент не абонент, то ли их всех уволили, то ли загрузили по самое не балуй
эт я к тому, что надеяться тут можешь только на себя
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 21.03.2024, 16:26
#11
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Offtop: Сугубо ИМХО - стоит все же сначала запускать приложение, а потом уже из-под него открывать файлы. Научен горьким опытом под акадом, когда у тебя под десяток профилей с различными настройками )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.03.2024, 16:30
#12
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


в качестве костылика под эту грабельку
дополнить батник скриптом
типа
Код:
[Выделить все]
filedia 0
enter
saveas
enter
да
filedia 1
тогда путь появится)))
Хотя проще всего поправить батник, чтобы он нане передавал полный путь
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 21.03.2024 в 16:43.
doctorraz вне форума  
 
Автор темы   Непрочитано 21.03.2024, 17:39
#13
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Я не могу отследить, как именно пользователь будет
открывать файл - поэтому пытаюсь учесть все мыслимые
и немыслимые способы.

Для себя-то чего - добавил путь в батник и не жужжу.

А вот насчёт "save as" интересно. Возможно, путь в
dwgprefix может появиться и после какого-то другого
события/команды. Надо поискать.

Кстати, если не лень, поотслеживайте пошагово, как
меняется значение в dwgname при создании нового
файла. Удивитесь. Там в какое-то время появляется и
исчезает
имя шаблона. :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 21.03.2024, 18:49
#14
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Удивитесь
Да лаааднаа, его жэж не ветром надуло.. Из шаблона и создается

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
не могу отследить, как именно пользователь будет
открывать файл
На моей памяти ты первый так придумал!!!
Напиши в саппорт про баг, может и поправят

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Возможно, путь в
dwgprefix может появиться и после какого-то другого
события/команды
Не может
По saveas. Он тупо сохраняет файл по пути окружения которое ты ему батником установил.. Т.е. этот каталог какбэ корневой. Путь походу уже добивает система, в нане его нет и неоткуда взяться
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 22.03.2024, 08:43
#15
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Код:
[Выделить все]
             Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;            

            //ful name
            string sFilName = doc.Name;

            sFilName = Path.GetFullPath(sFilName);//затычка если файл открыт по относительному пути

            string sSaveDir="";

            McUtilServise.RegistryMod rm = new McUtilServise.RegistryMod();

            bool isFilExist = File.Exists(sFilName);
            if (isFilExist)
            {
                sSaveDir = Path.GetDirectoryName(sFilName);
            }
            retun sSaveDir ;
теоретически можно оформить в лисп функцию, но нана их умеет начиная с нк24
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 22.03.2024, 09:29
#16
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Попробовал SaveAs.

Тоже не вариант.

а) Если сохранить открытый файл 01.dwg, как 02.dwg - всё О'К,
путь в "dwgprefix" появится.

б) Если попробовать сохранить открытый файл 01.dwg, как 01.dwg
(т.е. "самого в себя"), то nanoCAD просто не даст это сделать. Скажет, что
файл открыт другим процессом, не желая узнавать в нём себя, любимого. :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 22.03.2024, 09:36
#17
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Если попробовать сохранить открытый файл 01.dwg, как 01.dwg
(т.е. "самого в себя"), то nanoCAD просто не даст это сделать. Скажет, что
файл открыт другим процессом, не желая узнавать в нём себя, любимого. :-)
не подтверждаю, без проблем перезаписывает открытый самим собой файл
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 22.03.2024, 09:51
#18
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Ну, не скрин же мне прикладывать...
Версия 23.1 - заерепенилась у меня.

----- добавлено через ~5 мин. -----
Вот текст из окна:

Файл ....
открыт для редактирования в другом сеансе или другим
пользователем, поэтому не может быть замещен

и "красный крестик" слева от сообщения. :-)

----- добавлено через ~8 мин. -----
Это если в батнике в явном виде не прописать путь к открываемому файлу.
Если прописать - то всё ОК. Но тогда и первоначальной проблемы тоже нет.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 22.03.2024, 10:00
#19
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Ну, не скрин же мне прикладывать...
Версия 23.1 - заерепенилась у меня.

----- добавлено через ~5 мин. -----
Вот текст из окна:

Файл ....
открыт для редактирования в другом сеансе или другим
пользователем, поэтому не может быть замещен

и "красный крестик" слева от сообщения. :-)
если просто открыть файл и сохранитькак под этим жэж именем, дает?
смотри свой батник из под кого и как запускаешь нано
-------------
так запускаю
Код:
[Выделить все]
D:\setup\Desktop>"C:\Program Files\Nanosoft\nanoCAD x64 23.1\nCadS.exe" "-b" "nSPDSComp" "-r" "SPDS" "-a" "nanoCAD_x64_SPDS_23.1" "-oleid" "{7AF4B577-859C-4090-ACA4-95C07064A10B}" Без имени0.dwg
при соханить как просто запрос на перезапись и перезаписывает
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 22.03.2024, 10:53
#20
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Цитата:
если просто открыть файл и сохранитькак под этим жэж именем, дает?
Да, конечно даёт.

Если в батнике строка

start "DREAM-START" "C:\Program Files\Nanosoft\nanoCAD x64 23.1\nCad.exe" "0-str1.dwg"

т.е. "без пути", то сохратиться как "сам-в-себя" - не даёт.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > NanoCAD: как гарантированно узнать папку текущего открытого файла ?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для редактирования XML файла acad.cuix МишаИнженер Программирование 30 12.09.2012 11:30
Lisp. Проблема после копирование стиля несущего элемента (ADT) из файла молодой человек LISP 1 02.05.2011 22:56
Как реализовать "подгрузку/вставку" файла в нужное место открытого чертежа? star282 AutoCAD 10 18.03.2011 21:12
Как присоединить к одному чертежу (из 1ого файла) кусок продолжение (из 2ого)? star282 AutoCAD 13 17.03.2011 12:13
Частичное открытие файла - не активно при открытии файла ADik AutoCAD 4 22.06.2006 07:35