Как я могу получить доступ к подключенному сетевому диску с Системой. IO.DirectoryInfo?

Другие ответы здесь верны: is используется для сравнения identity , а == используется для сравнения равенство . Поскольку вам нужно заботиться о равенстве (две строки должны содержать одни и те же символы), в этом случае оператор is просто ошибочен, и вы должны использовать вместо него ==.

Причина is работает интерактивно, что (большинство) строковых литералов по умолчанию interned . Из Wikipedia:

Интернированные строки ускоряют сопоставления строк, которые иногда являются узким местом производительности в приложениях (например, компиляторами и языками динамического программирования), которые в значительной степени зависят от хэш-таблиц со строковыми ключами. Без интернирования проверка того, что две разные строки равны, включает в себя изучение каждого символа обеих строк. Это медленно по нескольким причинам: по своей сути это O (n) в длине строк; обычно требуется чтение из нескольких областей памяти, которые требуют времени; и чтение считывает кеш процессора, что означает, что для других нужд меньше кеша. С интернированными строками после первоначальной статической операции достаточно простого теста на идентификацию объекта; это обычно реализуется как тест равенства указателя, обычно это всего лишь одна машинная команда без ссылки на память.

blockquote>

Итак, когда у вас есть два строковых литерала (слова, которые буквально введены в ваш исходный код программы, окруженный кавычками) в вашей программе, имеющей то же значение, компилятор Python автоматически ставит строки, делая их оба сохраненными в том же месте памяти. (Обратите внимание, что это не всегда всегда , а правила для того, когда это происходит, довольно запутаны, поэтому, пожалуйста, не полагайтесь на это поведение в производственном коде!) [/ ​​G12]

Поскольку в вашем интерактивном сеансе обе строки фактически хранятся в одном и том же месте памяти, у них одинаковое identity , поэтому оператор is работает так, как ожидалось. Но если вы построите строку другим способом (даже если эта строка содержит точно одинаковые символы), то строка может быть равна , но это не одна и та же строка , то есть она имеет другое тождество , поскольку оно хранится в другом месте в памяти.

33
задан 26 September 2008 в 08:40
поделиться

5 ответов

Подключенные сетевые диски являются конкретным пользователем, поэтому если приложение работает под различными идентификационными данными, чем пользователь, который создал букву сетевого диска (z:) это не будет работать.

52
ответ дан 27 November 2019 в 17:56
поделиться

Учетная запись, под которой работает Ваше приложение, вероятно, не имеет доступа к сетевому диску. Если бы это - веб-приложение, которое определенно было бы проблемой... По умолчанию веб-приложение работает в соответствии с учетной записью СЕТЕВОЙ СЛУЖБЫ, которая не имела бы никакой установки сетевых дисков. Попытайтесь использовать олицетворение, чтобы видеть, решает ли оно проблему. Хотя, вероятно, необходимо выяснить лучшее решение тогда просто использование олицетворения. Если бы это был я, я придерживался бы использования пути UNC.

4
ответ дан 27 November 2019 в 17:56
поделиться

Вы отображаетесь с теми же самыми учетными данными, как программа работает с?

3
ответ дан 27 November 2019 в 17:56
поделиться

Вы работаете на Vista/Сервере 2k8? Обоими из тех изолированных сервисов в Сессию 0 и первую интерактивную сессию является Сессия 1. Существует больше информации здесь на изоляции сессии. Таким образом, даже если это будет тот же пользователь, используемый и для обслуживания и для интерактивного входа в систему, это будут различные сессии.

2
ответ дан 27 November 2019 в 17:56
поделиться

Можно попытаться использовать WNetConnection для разрешения сетевого диска к сетевому пути.

1
ответ дан 27 November 2019 в 17:56
поделиться