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.
Просмотров: 2447
 
Непрочитано 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=== вне форума  
 
Непрочитано 22.03.2024, 12:28
#21
Сергей812


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


если нет официального ТЗ и разработка ПО не являются прямыми должностными обязанностями - просто проверил бы наличие прямого и обратного слеша в имени файла и выдал предупреждение пользователю. Стоит ли столько времени тратить на нахождение путей обхода чужих косяков...
Сергей812 вне форума  
 
Автор темы   Непрочитано 22.03.2024, 12:53
#22
===AAA===


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


Цитата:
и разработка ПО не являются прямыми должностными обязанностями
Я так отдыхаю. :-)

А ларчик-то просто открывается, оказывается. Только что нашёл:

(findfile (getvar "dwgname"))

даёт полный путь к файлу, загруженному даже таким вот своеобразным батником.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 22.03.2024, 13:34
#23
Сергей812


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


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
findfile
вроде же только в прописанных в настройках *кад каталогах ищет
Сергей812 вне форума  
 
Непрочитано 22.03.2024, 13:55
#24
doctorraz

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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
вроде же только в прописанных в настройках *кад каталогах ищет
автокад ищет по путям поиска
нана вдобавок ищет в текущем каталоге
не обязательно файла dwg
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 22.03.2024, 13:58
#25
Сергей812


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


но текущий каталог можно и из окружения получить - круг замкнулся)
Сергей812 вне форума  
 
Непрочитано 22.03.2024, 14:05
#26
doctorraz

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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
но текущий каталог можно и из окружения получить - круг замкнулся)
Offtop:

в нанокад можно провернуть такую фигню невозможную в автокад
(все файлы лежат не по путям поиска)
загружаем первый лисп по полному пути
этот лисп может загружать другие лиспы по относительным путям относительно своего файла
из любого лиспа можно перезагрузить самого себя просто по имени файла без пути
Код:
[Выделить все]
 
(defun c:зз ()
  (load "comNana");comNana.lsp
  (princ)
) ;_enddefun



----- добавлено через ~24 мин. -----
Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
А ларчик-то просто открывается, оказывается. Только что нашёл:

(findfile (getvar "dwgname"))
главное, чтобы одноименный файл в путях поиска или C:\\Program Files\\Nanosoft\\nanoCAD x64 23.1\ не оказался)))
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 22.03.2024, 14:34
#27
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от doctorraz Посмотреть сообщение
автокад ищет по путям поиска
нана вдобавок ищет в текущем каталоге
не обязательно файла dwg
кад сначала ищет в каталоге текущего документа, потом уже лезет в каталоги поиска. Как оно в нанике - без понятия
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.03.2024, 14:46
#28
doctorraz

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Как оно в нанике
Наоборот очевидножэж)))
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 22.03.2024, 15:32
#29
===AAA===


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


Цитата:
главное, чтобы одноименный файл в путях поиска или C:\\Program Files\\Nanosoft\\nanoCAD x64 23.1\ не оказался)))
Да я уже по-всякому его погонял... Одноимённые файлы
из разных папок открывал в разной последовательности,
разных сеансах и разных копиях запущенного нано.

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

Т.е. алгоритм действий такой - читаем dwgprefix, если там этих
самых префиксов "\\" нет - лезем узнавать их из findfile.
__________________
Счастливо, Алексей!
===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