Directory.GetFiles работает, Directory.GetDirectories не находится в том же каталоге

В моем веб-приложении есть простой селектор файлов, который использует Directory.GetFiles и Directory.GetDirectories для создания пользовательского интерфейса. Это отлично работает на моем локальном хосте, но когда я загружаю его на свой хостинг Windows Server 2003, я вижу только файлы - в том же каталоге GetFiles работает, а GetDirectories - нет.

Код невероятно прост - строка dir создается вызовом Server.MapPath, а затем:

List<string> dirs = Directory.GetDirectories(dir).ToList();
List<string> files = Directory.GetFiles(dir).ToList();

Я перепробовал все, что мог придумать с точки зрения безопасности; вплоть до предоставления «всем» полного доступа ко всем каталогам в корневом веб-каталоге, и даже это не имеет значения.

Так что, если проблема не в безопасности, я был бы очень признателен за некоторые предложения, чтобы попробовать еще что-нибудь!

Обновление. Я довольно тупой - код, который выдавал HTML, содержал очень старый тестовый код, который не имел никакого значения на локальном уровне, поэтому не был замечен и удален, но из-за этого каждый каталог на сервере игнорировать! Что это было?

if (!subDir.Contains(".")) { ...

На сервере все сайты находятся в папках, названных по их домену, а на локальном - нет. Я == тупой. Извините всех!


person tags2k    schedule 01.05.2009    source источник


Ответы (3)


Каталоги скрыты?

Это настоящие каталоги или (поскольку это веб-сервер) виртуальные папки?

Кстати, если вам не нужны какие-то особенности List<T>, вы можете оставить их в исходных string[] массивах ... действительно, с 3.5 LINQ размывает преимущества List<T>, поскольку Where(...), First(...) и т. Д. Применяются к массивам.

person Marc Gravell    schedule 01.05.2009

Вы проверили, что каталог находится там, где вы думаете? IIS часто может помещать вас во временный каталог, поэтому он мог скопировать все ваши файлы в эту временную папку, но ни один из подкаталогов, поэтому их просто нет.

person Orion Edwards    schedule 01.05.2009

Вы можете принудительно создать исключение, если у вас нет разрешения:

new FileIOPermission(FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Read,dir).Demand();
person Chad Grant    schedule 01.05.2009