2009-05-01 2 views
0

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

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

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

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

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

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

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

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

ответ

0

Скрыты ли каталоги?

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

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

0

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

0

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

new FileIOPermission(FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Read,dir).Demand();