I am trying to get to a file located in
C:Program Files (x86)test softwaremyappdemo.exe
In VS debugger i see the path as:
""C:\Program Files (x86)\test software\myapp\demo.exe""
when i print it out i see in console :
"C:Program Files (x86)test softwaremyappdemo.exe"
but when i try something like
FileInfo fi = new FileInfo(PathMentionedAbove);
i get Illegal character in path.
What is wrong? the file exists and path is correct. what’s illegal above this path?
any help would be appreciated.
Oded
485k98 gold badges877 silver badges1003 bronze badges
asked Jul 23, 2010 at 7:04
Your path includes » at the beginning and at the end. Drop the quotes, and it’ll be ok.
The » at the beginning and end of what you see in VS Debugger is what tells us that the quotes are literally in the string.
answered Jul 23, 2010 at 7:06
Jay AllardJay Allard
9386 silver badges12 bronze badges
1
Try this:
string path = @"C:Program Files (x86)test softwaremyappdemo.exe";
answered Jul 23, 2010 at 7:08
You seem to have the quote marks ("
) embedded in your string at the start and the end. These are not needed and are illegal characters in a path. How are you initializing the string with the path?
This can be seen from the debugger visualizer, as the string starts with ""
and ends with ""
, it shows that the quotes are part of the string, when they shouldn’t be.
You can do two thing — a regular escaped string (using ) or a verbatim string literal (that starts with a
@
):
string str = "C:\Program Files (x86)\test software\myapp\demo.exe";
Or:
string verbatim = @"C:Program Files (x86)test softwaremyappdemo.exe";
answered Jul 23, 2010 at 7:07
OdedOded
485k98 gold badges877 silver badges1003 bronze badges
The string is surrounded by double quotes. Yes, that’s not a valid character in a path.
You should probably tackle it at the source, but you can strip them out with:
path = path.Replace(""", "");
answered Jul 23, 2010 at 7:07
Hans PassantHans Passant
913k145 gold badges1671 silver badges2507 bronze badges
1
I usualy would enter the path like this ….
FileInfo fi = new FileInfo(@"C:Program Files (x86)test softwaremyappdemo.exe");
Did you register the @ at the beginning of the string?
answered Jul 23, 2010 at 7:07
Yves M.Yves M.
3,34013 silver badges12 bronze badges
1
try
«C:/Program Files (x86)/test software/myapp/demo.exe»
Athari
33.3k15 gold badges103 silver badges144 bronze badges
answered Dec 27, 2013 at 6:56
I am trying to get to a file located in
C:Program Files (x86)test softwaremyappdemo.exe
In VS debugger i see the path as:
""C:\Program Files (x86)\test software\myapp\demo.exe""
when i print it out i see in console :
"C:Program Files (x86)test softwaremyappdemo.exe"
but when i try something like
FileInfo fi = new FileInfo(PathMentionedAbove);
i get Illegal character in path.
What is wrong? the file exists and path is correct. what’s illegal above this path?
any help would be appreciated.
Oded
485k98 gold badges877 silver badges1003 bronze badges
asked Jul 23, 2010 at 7:04
Your path includes » at the beginning and at the end. Drop the quotes, and it’ll be ok.
The » at the beginning and end of what you see in VS Debugger is what tells us that the quotes are literally in the string.
answered Jul 23, 2010 at 7:06
Jay AllardJay Allard
9386 silver badges12 bronze badges
1
Try this:
string path = @"C:Program Files (x86)test softwaremyappdemo.exe";
answered Jul 23, 2010 at 7:08
You seem to have the quote marks ("
) embedded in your string at the start and the end. These are not needed and are illegal characters in a path. How are you initializing the string with the path?
This can be seen from the debugger visualizer, as the string starts with ""
and ends with ""
, it shows that the quotes are part of the string, when they shouldn’t be.
You can do two thing — a regular escaped string (using ) or a verbatim string literal (that starts with a
@
):
string str = "C:\Program Files (x86)\test software\myapp\demo.exe";
Or:
string verbatim = @"C:Program Files (x86)test softwaremyappdemo.exe";
answered Jul 23, 2010 at 7:07
OdedOded
485k98 gold badges877 silver badges1003 bronze badges
The string is surrounded by double quotes. Yes, that’s not a valid character in a path.
You should probably tackle it at the source, but you can strip them out with:
path = path.Replace(""", "");
answered Jul 23, 2010 at 7:07
Hans PassantHans Passant
913k145 gold badges1671 silver badges2507 bronze badges
1
I usualy would enter the path like this ….
FileInfo fi = new FileInfo(@"C:Program Files (x86)test softwaremyappdemo.exe");
Did you register the @ at the beginning of the string?
answered Jul 23, 2010 at 7:07
Yves M.Yves M.
3,34013 silver badges12 bronze badges
1
try
«C:/Program Files (x86)/test software/myapp/demo.exe»
Athari
33.3k15 gold badges103 silver badges144 bronze badges
answered Dec 27, 2013 at 6:56
- Remove From My Forums
-
Question
-
Hello,
I want to upload a file into the database. While uploading I’m extracting the file name and extension. The problem now is if I have a file name which is separated by ‘_’, it is giving me and exception «illegal characters in path «.
The code I used is
string text = (@"C:\Users\xxxx\Desktop\9_file.bak"); byte[] data = File.ReadAllBytes(text); filename = Path.GetFileNameWithoutExtension(text); extension = Path.GetExtension(text); OdbcCommand Odbc2 = new OdbcCommand(); Odbc2.CommandText = "insert INTO table ( blob) VALUES (?)"; Odbc2.Parameters.AddWithValue("@blob", data); Odbc2.Connection = OdbcCon; Odbc2.ExecuteNonQuery();
Please help me to by pass t hat error.
thanks
-
Edited by
Tuesday, August 16, 2011 4:37 PM
mistake in code
-
Edited by
Answers
-
Welcome to MSDN Forums.
When you use ‘@’ at first of a string literal, you don’t need to use escape character (») so rewrite code as below:
string text = (@"C:UsersxxxxDesktop9_file.bak"); //OR string text = ("C:\Users\xxxx\Desktop\9_file.bak");
Sincerely,
Yasser.
FIRST KNOW THEN USE:
Computer and Information Technology (IT) Disadvantages-
Proposed as answer by
Sankarsan Parida
Wednesday, August 17, 2011 6:46 AM -
Marked as answer by
sriky
Wednesday, August 17, 2011 9:10 AM
-
Proposed as answer by
C # — недопустимые символы в пути
У меня есть таблица базы данных, содержащая пути к файлам Excel, которые я импортирую с помощью сценария C #.
Скрипт отлично работает, если путь к файлу не содержит пробелов, например. C:TempMy Excel File.xls , и я получаю сообщение об ошибке Illegal characters in path . К сожалению, я не могу изменить имена файлов в источнике.
Если я жестко закодирую путь к файлу, как показано ниже, он будет работать нормально.
Как мне изменить это, чтобы я мог включить строковую переменную, которая будет хранить путь к файлу из базы данных, например.
Заранее спасибо за любую помощь
Изменить : проблема вызвана тем, что файлы, начинающиеся с номера, создают недопустимую escape-последовательность. например C:Temp20160611 My Excel File.xls
Редактировать 2 : решено — ошибка была вызвана символами возврата каретки, появившимися после расширения файла. См. Мой ответ для решения.
В пути установки присутствуют недопустимые символы пожалуйста повторите ввод что делать
6 апр. 2014 в 0:55
1. Имя учетной записи в Windows должно быть на английском языке, а не на русском языке (относится к Windows XP и Windows 7).
C:Docu ments and SettingsВасяLocal SettingsApplication DataDivinity 2Savegames — Неправильно. Имя учетной записи написано кириллицей.
C:Docu ments and SettingsVasyaLocal SettingsApplication DataDivinity 2Savegames — Правильно.
2. Папка Мои Документы должна быть на английском языке (относиться к Windows XP).
Need for Speed. Hot Pursuit (2010) – из-за кириллицы в пути к профилю (прим. к папке с save файлами и файлом конфигурации) не сохраняются настройки клавиатуры (управление).
Windows 7 поддерживает псевдонимы для папок на внутреннем уровне. К примеру, папка «Мои Документы» в русскоязычной версии Windows 7 была переведена и отображается с переведённым именем, однако на уровне файловой системы остаётся англоязычной — «Docu ments».
Ещё пример, путь C:ПользователиОбщие на уровне файловой системы остаётся C:UsersPublic
2a. Игра «не понимающая» в пути кириллицу, просто не сможет создать файл сохранения).
2b. Корень жесткого диска (например D:) является недопустимым месторасположением «моих документов» (скажу иначе: корень жесткого диска не должен быть папкой «Мои Документы»):
D:My DocumentsBioWareMass Effect 3Save.. Правильно
D:BioWareMass Effect 3Save.. Неправильно (Mass Effect 1,3 не сможет создать файл сохранения)
3. Язык ввода по умолчанию должен быть Английский (США).
Windows XP: Пуск >> Панель управления >> Дата, время, язык и региональные стандарты >> Язык и региональные стандарты >> вкладка «Языки» >> кнопка «Подробнее».
Windows 7: Пуск >> Панель управления >> Язык и региональные стандарты >> вкладка «Языки и клавиатуры » >> кнопка «Изменить клавиатуру»
Из-за язык ввода по умолчанию Русский (Россия):
Crysis 2 – невозможно ввести логин и пароль (печатаются только цифры)
Lineage II — невозможно ввести логин и пароль (печатаются только цифры)
Divinity 2: The Dragon Knight Saga – в Настройках клавиатуры, назначенные клавиши отображаются иероглифами.
4. Язык и региональные стандарты >> Формат >> Россия
Если этого не сделать будет устанавливаться Английская версия игры (а не Русская), либо кириллический текст в игре будет отображаться некорректно.
Все дело в гениальной задумке некоторых разработчиков. По их мнению, язык в игре должен быть тем же, что указан в региональных настройках. Инсталлятор (программа-установщик) проверяет региональные настройки и доступные в игре языки локализации, и если вашего языка нет, то выбирается язык по умолчанию – Английский (а не Русский).
5. Все (абсолютно все) игры, следует устанавливать в папку, имя которой написано латинскими (английскими) буквами, даже если инсталлятор (программа-установщик) предлагает назвать папку кириллицей (русскими буквами). Так же в пути к исполняемому файлу не должно быть кириллицы.
D:GamesNeed for Speed Hot PursuitNFS11.exe (Правильно)
D:ИгрыNeed for Speed Hot PursuitNFS11.exe (Неправильно. В пути к исполняемому файлу кириллица.)
D:GamesNeed for Speed — Hot PursuitNFS11.exe (Нежелательный символ «тире».)
D:GamesNeed for Speed. Hot PursuitNFS11.exe (Нежелательный символ «точка».)
D:GamesNeed for Speed — Преследование по горячим следамNFS11.exe (Неправильно. Папка игры написана кириллицей.)
6. Что бы путь, к наиболее глубоко вложенному ресурсу игры, был как можно короче, необходимо избегать слишком длинных названий папок, а в некоторых случаях — пробелов в имени папок:
D:Games1st Person ShooterElectronic ArtsCrytekCrysis 2gamecrysis2LevelsWarscw2_city_hallminimapconstruction
сократить до: D:GamesCrysis 2gamecrysis2LevelsWarscw2_city_hallminimapconstruction
или даже до: D:Crysis 2gamecrysis2LevelsWarscw2_city_hallminimapconstruction
в пути установки присутствуют недопустимые символы что делать
& # 8216; Путь к папке содержит недопустимый символ & # 8217; в Windows 10
«Путь к папке содержит недопустимый символ» присутствует во всех версиях Windows, и Windows 10 не является исключением. Эта ошибка обычно появляется, когда вы пытаетесь установить или удалить определенное программное обеспечение, поэтому давайте посмотрим, как исправить эту ошибку.
Но прежде чем мы продолжим, вот еще несколько примеров этой проблемы:
Как исправить ошибку «Путь к папке содержит недопустимый символ» в Windows 10
Исправлено – «Путь к папке содержит недопустимый символ в программных файлах»
Решение 1. Удалите все из папки TEMP
Решение 2. Измените буквы дисков для приводов CD или DVD
Исправлено – «Путь к папке содержит недопустимый символ» при установке iTunes
При установке iTunes вы можете получить сообщение об ошибке «Путь к папке содержит недопустимый символ» или « Не удалось открыть ключ: UNKNOWN Components DA42BC89BF25F5BD0AF18C3B9B1A1EE8
b25099274a207264182f8181add555d0 ”. Хотя эти две ошибки выглядят очень по-разному, они оба связаны с ключами реестра и разрешениями, необходимыми для доступа к этим ключам. Чтобы исправить эти ошибки, сделайте следующее:
Исправлено – «Путь к папке содержит недопустимый символ» при установке Steam
Решение 2. Удалить ключи реестра Valve
При установке Steam ошибка «Путь к папке содержит недопустимый символ» может быть вызвана разделами реестра Valve, поэтому давайте попробуем удалить их, чтобы решить эту проблему.
Исправлено – «Путь к папке содержит недопустимый символ» при установке или удалении программного обеспечения
Решение 1. Установите программное обеспечение от имени другого пользователя
Если вы получаете «Путь к папке содержит недопустимый символ» при установке или удалении определенного программного обеспечения, вы можете попробовать установить его под другим пользователем. Для этого сначала необходимо создать нового пользователя на вашем компьютере. После того, как вы создали новую учетную запись пользователя, переключитесь на нее и попробуйте снова установить программное обеспечение.
Решение 2. Удалите недопустимый символ с помощью редактора реестра
Мы должны предупредить вас, что для завершения этого решения вам необходимо знать, какой персонаж вызывает эту ошибку. Если вы удалите неправильный символ или не знаете, что делаете, вы можете нанести ущерб вашему реестру. Прежде чем пытаться выполнить этот шаг, убедитесь, что вы создали резервную копию реестра на вашем компьютере.
Решение 3. Используйте стороннее программное обеспечение для удаления проблемных программ
Пользователи сообщают, что такие инструменты, как Revo Uninstaller Pro, могут помочь вам в этом случае. Эти инструменты удаляют все следы программного обеспечения из реестра, поэтому, если у вас возникает проблема «Путь к папке содержит недопустимый символ» при установке или удалении определенного программного обеспечения, вы можете попробовать один из этих инструментов.
«Путь к папке содержит недопустимый символ» иногда появляется при установке League of Legends, и, согласно сообщениям, эта ошибка вызвана ссылками на League of Legends в вашем реестре. Чтобы устранить эту проблему, вам нужно удалить эти ссылки, выполнив следующие действия:
Мы должны предупредить вас, что, удалив эти ключи, вы можете повредить реестр, если удалите неправильные ключи. В худшем случае некоторые программы могут перестать работать, если вы случайно удалите их ключи реестра, поэтому будьте осторожны, если вы решите сделать этот шаг. Чтобы избежать ненужного повреждения, вы можете создать резервную копию своего реестра, прежде чем удалять эти ключи.
Ошибка «Путь к папке содержит недопустимый символ» в основном связана с вашим реестром, и, как вы можете видеть, это может значительно усложнить установку нового программного обеспечения. Мы сделали все возможное, чтобы охватить большинство из этих проблем, и мы надеемся, что наши решения были полезны для вас.
Unarc.dll вернул код ошибки
Зачастую пользователи, при установке на компьютер различных игр, сталкиваются с проблемой, при которой в момент установки игры появляется сообщение Unarc.dll вернул код ошибки. Если более дословно, то ошибка выглядит следующим образом: это системное сообщение с текстом:
Произошла ошибка при распаковке:
Наиболее часто проблема возникает при распаковке так называемых repack’ов игр, в то время как официальные сборки не имеют подобных проблем либо эти ошибки сведены к минимуму и появляются только в том случае, если сам компьютер имеет серьезные проблемы с железом. Причинами же появления Unarc.dll могут быть как программные, так и аппаратные ошибки.
Проблемы с архиватором
Сама по себе Unarc.dll говорит о повреждении или изменении файлов в архиве, а также об отсутствии в системе архиватора либо имеющихся проблем с ним. Для решения достаточно скачать 7-Zip архиватор для Windows, который способен решить значительную часть проблем, связанных с отсутствием нужного архиватора для работы с файлами.
Проблемы с оперативной памятью
Но не всегда программные способы решения проблемы более быстры и удачны. Иногда, быстрее физически найти и устранить ошибку. Итак, что касается аппаратных проблем, то здесь стоит сказать о распространенных проблемах с оперативной памятью компьютера. Очень частой причиной является именно оперативная память. Но не стоит сразу расстраиваться и бросать все, потому что решение на самом деле может быть проще простого.
Выключите компьютер и откройте корпус системного блока, чтобы добраться до модулей оперативной памяти. Аккуратно выньте и протрите контакты оперативки, например, стирательной резинкой.
Режимы работы оперативной памяти
Еще одной причиной появления ошибки Unarc.dll и связанной с оперативной памятью является режим работы: одноканальный или двухканальный. Здесь тоже все просто, например, если у вас стоит одна оперативка на 4Gb, значит она работает в одноканальном режиме.
Таким образом, чтобы устранить ошибку, а также впредь избежать подобных ошибок, необходимо устанавливать два или 4 модуля оперативной памяти, в зависимости от имеющихся свободных слотов на материнской плате. Но это еще не все, наличие двух планок не гарантирует того, что компьютер работает в двухканальном режиме. Подробнее об этом читайте в статье двухканальный режим памяти.
Однако, в разрез общепринятым стандартам о том, как правильно использовать несколько модулей оперативной памяти, могут быть свои нюансы. Как правило, для стабильной работы при наличии двух модулей памяти, вставляют их в 1-первое и 3-третье гнезда соответственно, либо во 2-второе и 4-четвертое, при условии, что на компьютере 4 слота памяти.
Вот как в раз здесь и может крыться проблема. То есть, в этом случае необходимо экспериментировать со слотами и вставить, например одну планку в 1-первое гнездо, а другую в 4-четвертое. Если, например, у вас три планки памяти, вставлять их можно соответственно в 1-первое, 2-второе и 4-четвертое гнезда.
Не работает модуль оперативной памяти
Ну и последний способ, не совсем приемлемый абсолютно для всех пользователей — выход из строя модуля оперативной памяти. В данном случае, если стоит несколько планок. можно вытащить их все и вставлять по одной, тем самым, во-первых проверяя работоспособность операционной системы, в частности, при установке игры, а во-вторых выявляя проблемную память. В дальнейшем ее можно заменить. Если же ни одна из планок не помогает решить проблему — приобретать новые.
Проблема в пути установки
Вернемся к программным исправлениям. Наверное, все сталкивались с такой ошибкой, когда при установке какой-либо игры или программы, появляется сообщение типа
Это говорит о том, что та папка на компьютере, в которую вы пытаетесь установить игру или программу, содержит в себе недопустимые символы, как правило, русские буквы — кириллицу. В большинстве случаев установка в такую папку невозможна и завершается ошибкой. В нашем случае подобная проблема имеет место быть.
Чтобы исправить ошибку Unarc.dll, измените путь установки — переименуйте все символы в латинские. Еще проще — переместите папку в корень диска C, таким образом, чтобы игра устанавливалась в директорию
Проблема с брандмауэром
Любое антивирусное программное обеспечение — встроенный брандмауер либо другой установленный антивирус, пытается защитить компьютер от всевозможных вирусов, сетевой активности, хакерских атак. Поэтому многие процессы на компьютере антивирус попросту блокирует.
В момент установки игры может происходить несколько различных процессов, в том числе распаковка образа игры во временную папку и ее последующая установка в конечную директорию.
Может так случиться, что при распаковке, антивирус обнаружил подозрительную активность, например, некий вирусный файл, так как в сборках это очень распространено, посчитал его вирусом и запретил к обработке. Вследствие чего появляется ошибка с кодом Unarc.dll.
Если способы, описанные в данной статье, вам не помогли или вы нашли свое собственное решение, пожалуйста, напишите об этом в комментариях. Возможно это поможет кому-то еще.
В пути установки присутствуют недопустимые символы что делать
Сообщения: 25157
Благодарности: 3792
Папка, которая назначается в качестве переменной Temp должен быть создан вручную, система не создаст его.
Ошибка при компилировании.
Ошибка при компилировании.
Приветствую Ув.Пользователи форума у меня возник такой вопрос, при компилировании на Android выдает такую ошибку » Error building Player: ArgumentException: Illegal characters in path. » подскажите как исправить эту ошибку ?
- lekan55
- UNец
- Сообщения: 27
- Зарегистрирован: 07 сен 2012, 21:38
Re: Ошибка при компилировании.
seaman 06 дек 2013, 19:21
Русские литеры в пути?
- seaman
- Адепт
- Сообщения: 8351
- Зарегистрирован: 24 янв 2011, 12:32
- Откуда: Самара
Re: Ошибка при компилировании.
lekan55 06 дек 2013, 19:31
Нет, пробовал заново пересоздать проэкт все тоже самое
- lekan55
- UNец
- Сообщения: 27
- Зарегистрирован: 07 сен 2012, 21:38
Re: Ошибка при компилировании.
lekan55 07 дек 2013, 13:43
Попробовал для PC сделать без ошибок про компилировался.
- lekan55
- UNец
- Сообщения: 27
- Зарегистрирован: 07 сен 2012, 21:38
Re: Ошибка при компилировании.
OlegNick 07 дек 2013, 15:22
SDK JDK Всё есть?
Усложнять — просто, упрощать — сложно.
- OlegNick
- Старожил
- Сообщения: 585
- Зарегистрирован: 10 ноя 2013, 02:21
- Откуда: Россия, Калуга
Re: Ошибка при компилировании.
lekan55 08 дек 2013, 08:56
Да
- lekan55
- UNец
- Сообщения: 27
- Зарегистрирован: 07 сен 2012, 21:38
Re: Ошибка при компилировании.
lekan55 11 дек 2013, 18:10
Решил проблему переустановил unity3d
- lekan55
- UNец
- Сообщения: 27
- Зарегистрирован: 07 сен 2012, 21:38
Вернуться в Общие вопросы
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Steps to reproduce
Unknown other than run MSBuild on any .NET Framework solution that includes a dotnet standard class library with dotnet 2.0 installed, perhaps.
Expected behavior
MSBuild succeeds
Actual behavior
MSBuild fails with error:
error MSB4014: The build stopped unexpectedly because of an internal failure.r
error MSB4014: System.ArgumentException: Illegal characters in path.r
error MSB4014: at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)r
error MSB4014: at System.IO.Path.Combine(String path1, String path2)r
error MSB4014: at Microsoft.DotNet.MSBuildSdkResolver.EnvironmentProvider.<>c__DisplayClass7_0.<GetCommandPath>b__0(String p)r
error MSB4014: at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()r
error MSB4014: at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)r
error MSB4014: at Microsoft.DotNet.MSBuildSdkResolver.EnvironmentProvider.GetCommandPath(String commandName)r
error MSB4014: at Microsoft.DotNet.MSBuildSdkResolver.DotNetMSBuildSdkResolver.GetDotnetExeDirectory()r
error MSB4014: at Microsoft.DotNet.MSBuildSdkResolver.DotNetMSBuildSdkResolver.ResolveNetcoreSdkDirectory(SdkResolverContext context)r
error MSB4014: at Microsoft.DotNet.MSBuildSdkResolver.DotNetMSBuildSdkResolver.Resolve(SdkReference sdkReference, SdkResolverContext context, SdkResultFactory factory)r
error MSB4014: at Microsoft.Build.BackEnd.SdkResolution.GetSdkPath(SdkReference sdk, LoggingContext loggingContext, ElementLocation sdkReferenceLocation, String solutionPath, String projectPath)
Environment data
dotnet --info
output:
.NET Command Line Tools (2.0.2)
Product Information:
Version: 2.0.2
Commit SHA-1 hash: a04b4bf512
Runtime Environment:
OS Name: Windows
OS Version: 6.1.7601
OS Platform: Windows
RID: win7-x64
Base Path: C:Program Filesdotnetsdk2.0.2
Microsoft .NET Core Shared Framework Host
Version : 2.0.0
Build : e8b8861ac7faf042c87a5c2f9f2d04c98b69f28d
Additional Info
-
I noticed that the error originates from this function in MSBuild that looks for the path to dotnet, so I set the
DOTNET_MSBUILD_SDK_RESOLVER_CLI_DIR
toC:Program Filesdotnet
get around it.
https://github.com/dotnet/cli/blob/aacd49f514fecca254f631d4add049c4f8fa0861/src/Microsoft.DotNet.MSBuildSdkResolver/MSBuildSdkResolver.cs#L170 -
It presumes the
PATH
has an invalid character, but the following is the exactPATH
environment variable with no invalid characters:
C:Program Files (x86)EMC IRMCommon;C:ProgramDataOracleJavajavapath;%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;%SYSTEMROOT%System32WindowsPowerShellv1.0;C:Program FilesIntelDMIX;C:Program Files (x86)Microsoft ASP.NETASP.NET Web Pagesv1.0;C:Program Files (x86)Microsoft SQL Server90Toolsbinn;C:Program Files (x86)Kaspersky LabKaspersky Anti-Virus 6.0 for Windows Servers MP4;C:Program FilesWindows Imaging;C:Program FilesMicrosoftWeb Platform Installer;C:Program Files (x86)DellSysMgtomabin;C:Program Files (x86)DellSysMgtsharedbin;C:Program Files (x86)DellSysMgtidrac;C:Program FilesMicrosoft SQL Server110ToolsBinn;C:Program Files (x86)Windows Kits8.1Windows Performance Toolkit;C:Program Files (x86)Microsoft SQL Server110ToolsBinn;C:Program FilesMicrosoft SQL Server110DTSBinn;C:Program Files (x86)Microsoft SQL Server110ToolsBinnManagementStudio;C:Program Files (x86)Microsoft SQL Server110DTSBinn;C:Program Files (x86)Microsoft SDKsTypeScript1.8;C:UserstfsserviceAppDataRoamingnpm;C:Program Files (x86)Gitbin;C:Program Files (x86)Gitcmd ;C:Program Filesnodejs;%USERPROFILE%.dnxbin;C:Program FilesMicrosoft DNXDnvm;C:Program FilesMicrosoft SQL Server120ToolsBinn;C:Program Filesdotnet
Note: I couldn’t attach the iLogic rule as .iLogicVb, so I renamed it to .txt. I don’t know if that breaks it when sharing.
What I believe the code is supposed to do / what I want it to do:
- Go through each item in the Model browser (subassemblies included)
- Check if there is a drawing that match’s the item’s name in the same folder as the item.
- If yes, make a PDF.
- Go to next item.
I’m getting an error about illegal characters in path. I imagine that’s something like a comma in the assembly? Is there a simple thing I can add to this code to make it skip past anything that would generate an error?
The text of the rule itself is here:
Option Explicit On
Imports System.io
Imports System.LINQ
Sub Main
Dim extensions As String() = {".dwg", ".idw"}
Dim defaultDrawingExtension = ".idw" ' ".dwg"
Dim dir As DirectoryInfo = Nothing
Dim JustDoIt As Boolean = True
Dim newPDFName As String = ""
Dim trimmedfilename As String = ""
Dim drawingfiles As List(Of FileInfo) = Nothing
'check that the active document is an assembly file
If ThisApplication.ActiveDocument.DocumentType <> DocumentTypeEnum.kAssemblyDocumentObject Then
MessageBox.Show("Please run this rule from the assembly file.", "iLogic")
Exit Sub
End If
'define the active document as an assembly file
Dim oAsmDoc As AssemblyDocument
oAsmDoc = ThisApplication.ActiveDocument
Dim oAsmName As String = System.IO.Path.GetFileNameWithoutExtension(oAsmDoc.FullFileName) 'Left(oAsmDoc.DisplayName, Len(oAsmDoc.DisplayName) -4)
'MessageBox.Show(oAsmName)
'get user input
Dim RUsure As DialogResult = MessageBox.Show(
"This will create a PDF file for all of the assembly components that have drawing files." _
& vbLf & "This rule expects that the drawing file shares the same name and location as the component." _
& vbLf & " " _
& vbLf & "Are you sure you want to create PDF Drawings for all of the assembly components?" _
& vbLf & "This could take a while.", "iLogic - Batch Output PDFs ", MessageBoxButtons.YesNo)
If RUsure = vbNo Then
Exit Sub
End If
'MessageBox.Show("Continuing")
'- - - - - - - - - - - - -PDF setup - - - - - - - - - - - -
Dim oPath As String = ThisDoc.Path
Dim PDFAddIn As TranslatorAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
Dim oContext As TranslationContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
Dim oOptions As NameValueMap = ThisApplication.TransientObjects.CreateNameValueMap
Dim oDataMedium As DataMedium = ThisApplication.TransientObjects.CreateDataMedium
'MessageBox.Show("Continuing")
If PDFAddIn.HasSaveCopyAsOptions(oAsmDoc, oContext, oOptions) Then
oOptions.Value("All_Color_AS_Black") = 0
'oOptions.Value("Remove_Line_Weights") = 0
'oOptions.Value("Vector_Resolution") = 400
oOptions.Value("Sheet_Range") = Inventor.PrintRangeEnum.kPrintAllSheets
'oOptions.Value("Custom_Begin_Sheet") = 2
'oOptions.Value("Custom_End_Sheet") = 4
End If
'MessageBox.Show("Continuing")
'get PDF target folder path
Dim oFolder As String = System.IO.Path.GetDirectoryName(oAsmDoc.FullFileName) & "" & oAsmName & " PDF Files"
MessageBox.Show("Looking for: " & oFolder & " & Creating it if it doesn't already exist!")
'Check for the PDF folder and create it if it does not exist
If Not System.IO.Directory.Exists(oFolder) Then
System.IO.Directory.CreateDirectory(oFolder)
End If
'- - - - - - - - - - - - -
'- - - - - - - - - - - - -Component Drawings - - - - - - - - - - - -
'look at the files referenced by the assembly
Dim oRefDocs As DocumentsEnumerator
oRefDocs = oAsmDoc.AllReferencedDocuments
Dim oRefDoc As Document
For Each oRefDoc In oRefDocs
Dim filename As String = oRefDoc.FullDocumentName
Dim ThisFileDir As String = System.IO.Path.GetDirectoryName(oRefDoc.FullDocumentName)
If Not JustDoIt Then
RUsure = MessageBox.Show(filename, "PDF This file?", MessageBoxButtons.YesNo)
If RUsure = vbNo Then
Continue For
End If
End If
dir = New DirectoryInfo(ThisFileDir)
trimmedfilename = System.IO.Path.GetFileNameWithoutExtension(filename)
drawingfiles = GetFilesByExtensions(dir, trimmedfilename, extensions)
If drawingfiles.Count = 1 Then
Dim oDrawDoc As DrawingDocument
oDrawDoc = ThisApplication.Documents.Open(drawingfiles.Item(0).FullName, True)
Dim oFileName As String = System.IO.Path.GetFileNameWithoutExtension(oRefDoc.DisplayName)
Dim tempRev As String = GetRevisionProp(oDrawDoc)
newPDFName = oFolder & "" & oFileName & " R" & tempRev & ".pdf"
If System.IO.File.Exists(newPDFName) Then
If CheckReadOnly(newPDFName) Then
MessageBox.Show("PDF Exists and is read only," & vbCrLf & "Suggest you close it or check it out of Vault!" & vbCrLf & "before trying this rule again!")
Exit Sub
End If
End If
oDataMedium.FileName = newPDFName
Call PDFAddIn.SaveCopyAs(oDrawDoc, oContext, oOptions, oDataMedium)
oDrawDoc.Close()
ElseIf drawingfiles.Count > 1 Then
MessageBox.Show("We found multiple format drawing files!" & vbCrLf & "Please correct this before trying again!")
ElseIf drawingfiles.Count = 0 Then
ThisApplication.StatusBarText = "No Matching drawing file found for: " & filename
End If
Next
'- - - - - - - - - - - - -
'- - - - - - - - - - - - -Top Level Drawing - - - - - - - - - - - -
Dim assyfilename As String = oAsmDoc.FullFileName
Dim assyFileDir As String = System.IO.Path.GetDirectoryName(oAsmDoc.FullFileName)
dir = New DirectoryInfo(assyFileDir)
trimmedfilename = System.IO.Path.GetFileNameWithoutExtension(assyfilename)
drawingfiles = GetFilesByExtensions(dir, trimmedfilename, extensions)
If drawingfiles.Count = 1 Then
Dim oAsmDrawingDoc As DrawingDocument = ThisApplication.Documents.Open(drawingfiles.Item(0).FullName, True)
Dim oAsmDrawingName As String = System.IO.Path.GetFileNameWithoutExtension(oAsmDrawingDoc.FullFileName)
Dim tempRev = GetRevisionProp(oAsmDrawingDoc)
newPDFName = oFolder & "" & oAsmDrawingName & " R" & tempRev & ".pdf"
oDataMedium.FileName = newPDFName
If System.IO.File.Exists(newPDFName) Then
If CheckReadOnly(newPDFName) Then
MessageBox.Show("PDF Exists and is read only," & vbCrLf & "Suggest you close it or check it out of Vault!" & vbCrLf & "before trying this rule again!")
Exit Sub
Else
Call PDFAddIn.SaveCopyAs(oAsmDrawingDoc, oContext, oOptions, oDataMedium)
End If
Else
Call PDFAddIn.SaveCopyAs(oAsmDrawingDoc, oContext, oOptions, oDataMedium)
End If
'Close the top level drawing
oAsmDrawingDoc.Close()
End If
'- - - - - - - - - - - - -
'MessageBox.Show("New Files Created in: " & vbLf & oFolder, "iLogic")
'open the folder where the new ffiles are saved
Shell("explorer.exe " & oFolder, vbNormalFocus)
End Sub
Public Function GetFilesByExtensions(dir As DirectoryInfo, filename As String, ParamArray extensions As String()) As List(Of FileInfo)
If extensions Is Nothing Then
Throw New ArgumentNullException("extensions")
End If
Dim files = dir.EnumerateFiles("*.*", SearchOption.AllDirectories).Where(Function(s As FileInfo) Not (s.FullName.Contains("OldVersions")) And (System.IO.Path.GetFileNameWithoutExtension(s.FullName).ToLower() = filename.ToLower()))
'Dim files = dir.EnumerateFiles("*.*", SearchOption.AllDirectories).Where(Function(s As FileInfo) Not (s.FullName.Contains("-")) And Not (s.FullName.contains("OldVersions")))
Return files.Where(Function(f As FileInfo) extensions.Contains(f.Extension)).OrderBy(Function(x As FileInfo) x.Name).ToList()
End Function
Public Shared Function CheckReadOnly(ByVal doc As String) As Boolean
Try
' Handle the case with the active document never saved
If System.IO.File.Exists(doc) = False Then
MessageBox.Show("Save file before executing this method. Exiting ...")
Return False
End If
Dim atts As System.IO.FileAttributes = IO.File.GetAttributes(doc)
If ((atts And System.IO.FileAttributes.ReadOnly) = System.IO.FileAttributes.ReadOnly) Then
Return True
Else
'The file is Read/Write
Return False
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
Return False
End Try
End Function
Public Shared Function GetRevisionProp(ByRef MyDocument As Document) As String
Dim oPropSets As PropertySets
Dim oPropSet As PropertySet
Dim oRevNumiProp As [Property]
' Get the PropertySets object.
oPropSets = MyDocument.PropertySets
' Get the design tracking property set.
oPropSet = oPropSets.Item("Inventor Summary Information")
' Get the part number iProperty.
oRevNumiProp = oPropSet.Item("Revision Number")
If oRevNumiProp.Value <> "" Then
GetRevisionProp = oRevNumiProp.Value
Else
GetRevisionProp = "A"
End If
End Function