Illegal characters in path как исправить

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"" ...

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's user avatar

Oded

485k98 gold badges877 silver badges1003 bronze badges

asked Jul 23, 2010 at 7:04

ke3pup's user avatar

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 Allard's user avatar

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

Martin Ingvar Kofoed Jensen's user avatar

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

Oded's user avatar

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 Passant's user avatar

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.'s user avatar

Yves M.Yves M.

3,34013 silver badges12 bronze badges

1

try

«C:/Program Files (x86)/test software/myapp/demo.exe»

Athari's user avatar

Athari

33.3k15 gold badges103 silver badges144 bronze badges

answered Dec 27, 2013 at 6:56

wendy_wu's user avatar

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's user avatar

Oded

485k98 gold badges877 silver badges1003 bronze badges

asked Jul 23, 2010 at 7:04

ke3pup's user avatar

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 Allard's user avatar

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

Martin Ingvar Kofoed Jensen's user avatar

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

Oded's user avatar

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 Passant's user avatar

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.'s user avatar

Yves M.Yves M.

3,34013 silver badges12 bronze badges

1

try

«C:/Program Files (x86)/test software/myapp/demo.exe»

Athari's user avatar

Athari

33.3k15 gold badges103 silver badges144 bronze badges

answered Dec 27, 2013 at 6:56

wendy_wu's user avatar

  • 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

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

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

  1. 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 to C:Program Filesdotnet get around it.
    https://github.com/dotnet/cli/blob/aacd49f514fecca254f631d4add049c4f8fa0861/src/Microsoft.DotNet.MSBuildSdkResolver/MSBuildSdkResolver.cs#L170

  2. It presumes the PATH has an invalid character, but the following is the exact PATH 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

Понравилась статья? Поделить с друзьями:
  • Import javax mail error
  • Import flask error
  • Import file error 3dxchange may not support this data format
  • Import error python cannot import name
  • Import cv2 python ошибка