2016-10-30 6 views
-2

Я пытаюсь рекурсивно пройти через каталог и использовать GetFiles, чтобы вернуть список всех файлов в этом каталоге. Вот мой код:GetFiles Access Denied Exception

public string[] passFiles(string location) 
     { 
      string[] files; 
      try 
      { 
       files = Directory.GetFiles(location); 
       return files; 
      } 
      catch (UnauthorizedAccessException) 
      { 
       // Code here will be hit if access is denied. 
       throw; 
      } 
     } 

Но он по-прежнему дает мне сообщение об ошибке «Отказано в доступе». Когда я пытаюсь оставить пустую часть catch, она говорит, что все пути должны что-то возвращать, поэтому я поместил оператор throw. Любые идеи относительно того, почему это не игнорирует ошибку и переходит к следующей?

+2

Где находится рекурсия? – Steve

+0

@Steve Я предполагаю, что он вызывает функцию рекурсивно, а сама функция является рекурсивной. –

+0

@JayGould, тогда как получилось, что это рекурсивная функция? Рекурсивная функция по определению является функцией, которая вызывает себя. – Rahul

ответ

1

Когда возникает исключение и вы получаете исключение, вам все равно нужно вернуть результат для функции. Инициализируйте ваши файлы переменных, чтобы они содержали пустой массив, а затем возвращали его после блока try-catch, поэтому он всегда возвращается, даже когда возникает ошибка.

public string[] passFiles(string location) 
{ 
    // Create an empty array that will be returned in case something goes wrong 
    string[] files = new string[0]; 
    try 
    { 
     files = Directory.GetFiles(location); 
    } 
    catch (UnauthorizedAccessException) 
    { 
     // Code here will be hit if access is denied. 
    } 

    return files; 
} 

Смотрите также this question на аналогичный вопрос и некоторые полезные ответы.

+0

Какой смысл возвращать пустой массив? не служит никакой цели. В этом случае лучше вернуть null. – Rahul

+0

@Rahul Смотрите [эту тему] (http://stackoverflow.com/questions/1969993/is-it-better-to-return-null-or-empty-collection) на обсуждение вашего мнения. – NineBerry

+0

Ничего себе. Работала отлично. Спасибо огромное! Еще один маленький вопрос: как мне изменить это, чтобы поймать исключение, если файл используется? Было бы что-то вроде 'catch (IOException)'? – Alan

0

Вам нужно вернуть что-то в случае, если вы поймаете исключение.

Возможно, верните нуль в конце метода - и не забудьте проверить это в вызывающем коде.