BackGround Worker в c # для рекурсивного анализа списка файлов, исключение Acces Denied - PullRequest
0 голосов
/ 10 марта 2012

Я пытаюсь перечислить все файлы из папки / диска, включая подкаталоги, игнорируя исключение «Отказано в доступе», которое возникает, когда я использую метод Directory.GetFiles ().

У меня есть метод. Проблема в том, что метод включает в себя рекурсивные вызовы сам по себе, я не могу вызвать рекурсивный фоновый работник. Как я могу реализовать этот метод в качестве фоновой работы.

 static void WalkDirectoryTree(System.IO.DirectoryInfo root)
{
    System.IO.FileInfo[] files = null;
    System.IO.DirectoryInfo[] subDirs = null;

    // First, process all the files directly under this folder
    try
    {
        files = root.GetFiles("*.*");
    }
    // This is thrown if even one of the files requires permissions greater
    // than the application provides.
    catch (UnauthorizedAccessException e)
    {
        // This code just writes out the message and continues to recurse.
        // You may decide to do something different here. For example, you
        // can try to elevate your privileges and access the file again.
        log.Add(e.Message);
    }

    catch (System.IO.DirectoryNotFoundException e)
    {
        Console.WriteLine(e.Message);
    }

    if (files != null)
    {
        foreach (System.IO.FileInfo fi in files)
        {
            // In this example, we only access the existing FileInfo object. If we
            // want to open, delete or modify the file, then
            // a try-catch block is required here to handle the case
            // where the file has been deleted since the call to TraverseTree().
            Console.WriteLine(fi.FullName);
        }

        // Now find all the subdirectories under this directory.
        subDirs = root.GetDirectories();

        foreach (System.IO.DirectoryInfo dirInfo in subDirs)
        {
            // Resursive call for each subdirectory.
            WalkDirectoryTree(dirInfo);
        }
    }            
}

}

1 Ответ

1 голос
/ 10 марта 2012

Очень просто: просто вызовите этот метод внутри вашего body-метода фоновых рабочих.

...