每次运行下面的代码时,我都会得到UnauthorizedAccessException
。我添加了try
和catch
块,这可以防止错误,但是它阻止了程序死在它的轨道中。
有没有办法可以忽略此错误并阅读未经授权的访问文件?如果没有,我只想让我的程序继续跳过这些文件而不停止。
以下是代码:
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。
答案 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循环中的某个时刻区分文件和目录。