UnauthorizedAccessException,如何忽略并保持程序运行?

时间:2018-05-03 23:51:00

标签: c#

每次运行下面的代码时,我都会得到UnauthorizedAccessException。我添加了trycatch块,这可以防止错误,但是它阻止了程序死在它的轨道中。

有没有办法可以忽略此错误并阅读未经授权的访问文件?如果没有,我只想让我的程序继续跳过这些文件而不停止。

以下是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Threading;

namespace Interface
{
    class Progra
    {
        static void Main(string[] args)
        {
            try
            {
                int number = 0;
                string[] files = Directory.GetFiles("C:\\", "*.*", 
                    SearchOption.AllDirectories);

                foreach (string file in files)
                {
                    number = number + 1;

                    Console.ForegroundColor = ConsoleColor.Green;
                    DateTime now = DateTime.Now;
                    Console.Write("[" + now + "]");

                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.Write(" [" + number + "] ");

                    Console.ForegroundColor = ConsoleColor.White;
                    Console.Write(file + "\n");
                }

                Console.WriteLine("");
                Console.WriteLine("- " + number + " files found!");
                Console.ReadKey();
            }
            catch
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("- An unknown error occoured and the contents " + 
                    "of this folder can not be displayed.\n");
                Console.ForegroundColor = ConsoleColor.White;
            }

            Console.ReadKey();
        }
    }
}

如果有答案,你能告诉我怎么做吗? No#at C#:P。

1 个答案:

答案 0 :(得分:0)

try
{
    int number = 0;
    string[] files = Directory.GetFiles("C:\\", "*.*",
        SearchOption.TopDirectoryOnly);

    foreach (string file in files)
    {
        try
            {
                string[] innerFiles = Directory.GetFiles(file, "*.*",
                    SearchOption.TopDirectoryOnly);
            }
            catch (Exception e)
            {
                // stuff here
            }

            number = number + 1;

            Console.ForegroundColor = ConsoleColor.Green;
            DateTime now = DateTime.Now;
                Console.Write("[" + now + "]");

                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write(" [" + number + "] ");

                Console.ForegroundColor = ConsoleColor.White;
                Console.Write(file + "\n");
            }

            Console.WriteLine("");
            Console.WriteLine("- " + number + " files found!");
            Console.ReadKey();
        }
        catch (Exception e)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.Write("- An unknown error occoured and the contents " +
                "of this folder can not be displayed.\n");
            Console.ForegroundColor = ConsoleColor.White;
        }

        Console.ReadKey();
    }

这是一项很好的工作,但我有点开始了。异常发生在字符串数组的声明中,一旦发生这种情况,它从未进入foreach循环并刚刚结束。如果你希望它在失败之后继续循环,那么将异常移动到循环内部,这样就会发生捕获并返回循环。您需要做的其他事情是使其递归,循环遍历文件结构中的每个级别,而不是一次抓取所有文件。说实话,从Microsoft获取文件的方法不是很好......它可能只是为你处理这个问题,但我确信它没有这个原因。

我不确定该程序的用途,但您可能需要在foreach循环中的某个时刻区分文件和目录。