// Create an empty list
List<string> scanFiles = new List<string>();
// Split possible extention list into array
string[] scanExtensions = @"exe,com".Split(',');
try
{
foreach (string extension in scanExtensions)
{
// Add collection for this filetype to the list of files
scanFiles.AddRange(Directory.GetFiles("C:\\", "*." + extension, SearchOption.AllDirectories));
}
}
catch (Exception ex)
{
Console.WriteLine("ERROR: " + ex.Message);
}
// Display results
foreach(string sf in scanFiles)
{
Console.WriteLine(sf);
}
因此,如果我运行上面的代码,我会收到错误 - 但不是我期望的错误。它显示以下内容......
错误:拒绝访问路径'C:\ Documents and Settings \'。
如果我没有指定'C:\'作为目录路径,我会理解这一点!如果我将其更改为任何有效的目录(如C:\ Program Files),代码工作正常。谁能解释一下呢?
谢谢, 西蒙
答案 0 :(得分:2)
好吧,名为“拒绝访问”的错误消息的原因是......您无法访问该文件夹!
尝试在Windows资源管理器中单击它。您会注意到,事实上,您无法访问它。多么令人惊讶;-)这条消息告诉你的确如此。
SearchOption.AllDirectories意味着GetFiles将递归枚举所有文件。如果它遇到错误某处,它将引发异常。没有办法改变它。
您无法使Directory.GetFiles忽略访问被拒绝的错误。因此,您必须编写自己的文件系统枚举代码。它可能是一个递归函数,其中包含一些错误处理代码。
答案 1 :(得分:2)
SearchOption.AllDirectories
表示您的代码将深入到(禁止)区域。
最好准备好处理这种错误。对于没有捕获异常的解决方案,您需要DirectoryInfo.GetFiles()
来获取FileInfo对象而不是字符串,并提前验证您的访问权限。
但是由于并发性,你仍然需要处理异常(找不到文件/目录),所以你可能会忘记FileInfo
。
答案 2 :(得分:2)
您根据documentation表示
指定了SearchOption.AllDirectories
AllDirectories在搜索操作中包含当前目录和 所有子目录 。此选项包括重新分析点,如安装的驱动器和搜索中的符号链接。
换句话说,您的搜索是递归的,然后向下进入您没有读取权限的Documents and Settings
。