2014-11-06 4 views
0

Я пытаюсь найти файл в заданном каталоге. Я должен найти файл из самого внутреннего каталога, и если не найден рекурсивно, то 1 шаг вверх.Найти файл из innermost в внешний каталог (рекурсивный)

Ex: Итерация 1: Поиск файла: D: \ Folder1 \ Folder2 \ folder3 \ Folder4

Ex: Итерация 2: Поиск файла: D: \ Folder1 \ Folder2 \ folder3 \

Ex: Итерация 3: Поиск файла: D: \ Folder1 \ Folder2 \

Мой код:

private string findTheFile(string path) 
    { 

     string[] files = Directory.GetFiles(path, "filename.txt", SearchOption.TopDirectoryOnly); 

     if (files.Length == 1) 
      return files[0].ToString(); //File found, return the file's path. 
     else 
      findTheFile(Path.GetDirectoryName(path));// File not found, recursively search the parent folder. 

     return null; // Return null if file not found. 
    } 

Что происходит: Код работает в одну сторону, то есть местоположение файла найдено. Но вместо того, чтобы возвращать значение, элемент управления продолжается до части else.

Прошу вас, если я поступил не так.

Спасибо заранее!

ответ

0

Попробуйте это, вы должны вернуть результат рекурсивного метода:

private string findTheFile(string path) 
    { 

     string[] files = Directory.GetFiles(path, "filename.txt", SearchOption.TopDirectoryOnly); 

     if (files.Length == 1) 
      return files[0].ToString(); 
     else 
      return findTheFile(Path.GetDirectoryName(path)); /* You should return your result here */ 

     return null; 
    } 

Если вы не возвращают результат findTheFile метода, значение null будет возвращено.

+1

Это работало, все, что мне нужно было сделать в другой части, не вызывало функцию напрямую. Но используйте оператор return. Благодаря!! – user3686904

+0

@ user3686904: Удачи ;-) –

0

Я не знаю, что вы подразумеваете под «продолжается до части другого». Но ваш код должен работать, если вы исправите его так:

private string findTheFile(string path) 
{ 
    if (string.IsNullOrEmpty(path)) 
    { 
     return null; 
    } 

    string[] files = Directory.GetFiles(path, "filename.txt", SearchOption.TopDirectoryOnly); 

    if (files.Length == 1) 
     return files[0]; //File found, return the file's path. 

    return findTheFile(Path.GetDirectoryName(path)); // File not found, recursively search the parent folder. 
} 
Смежные вопросы