Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何枚举C:和所有子文件夹的根_C#_.net - Fatal编程技术网

C# 如何枚举C:和所有子文件夹的根

C# 如何枚举C:和所有子文件夹的根,c#,.net,C#,.net,我有点困惑。我编写了以下脚本,将某个扩展类型的文件添加到列表中,它确实有效,只是不适用于C的根:下面是代码 // Create an empty list List<string> scanFiles = new List<string>(); // Split possible extention list into array string[] scanExtensions = @"exe,com".S

我有点困惑。我编写了以下脚本,将某个扩展类型的文件添加到列表中,它确实有效,只是不适用于C的根:下面是代码

        // 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);
        }
//创建一个空列表
List scanFiles=新列表();
//将可能的扩展列表拆分为数组
字符串[]scanExtensions=@“exe,com”.Split(',');
尝试
{
foreach(scanExtensions中的字符串扩展名)
{
//将此文件类型的集合添加到文件列表中
scanFiles.AddRange(Directory.GetFiles(“C:\\”,“*。”+扩展名,SearchOption.AllDirectories));
}
}
捕获(例外情况除外)
{
Console.WriteLine(“错误:+ex.Message”);
}
//显示结果
foreach(扫描文件中的字符串sf)
{
控制台写入线(sf);
}
因此,如果我运行上述代码,我会得到一个错误——但不是我预期的错误。它显示以下内容

错误:对路径“C:\Documents and Settings\”的访问被拒绝。

如果我没有指定“C:\”作为目录路径,我就会理解这一点!如果我将其更改为任何有效目录(如C:\Program Files),代码工作正常。有人能解释一下吗

谢谢,
Simon

嗯,名为“访问被拒绝”的错误消息的原因是。。。你没有访问该文件夹的权限

尝试在Windows资源管理器中单击它。您会注意到,实际上,您无法访问它。真令人惊讶;-)消息告诉你的正是这一点

SearchOption.AllDirectory意味着GetFiles将递归枚举所有文件。如果它在某处遇到错误,它将抛出异常。这是无法改变的


无法使Directory.GetFiles忽略拒绝访问错误。因此,您必须编写自己的文件系统枚举代码。它可能是一个递归函数,其中包含一些错误处理代码。

嗯,错误消息“拒绝访问”的原因是。。。你没有访问该文件夹的权限

尝试在Windows资源管理器中单击它。您会注意到,实际上,您无法访问它。真令人惊讶;-)消息告诉你的正是这一点

SearchOption.AllDirectory意味着GetFiles将递归枚举所有文件。如果它在某处遇到错误,它将抛出异常。这是无法改变的


无法使Directory.GetFiles忽略拒绝访问错误。因此,您必须编写自己的文件系统枚举代码。它可能是一个递归函数,其中包含一些错误处理代码。

SearchOption。所有目录
意味着您的代码将深入(禁止)区域

最好准备好处理这种错误。对于不捕获异常的解决方案,您需要
DirectoryInfo.GetFiles()
来获取FileInfo对象而不是字符串,并提前验证您的访问权限


但是由于并发性,您仍然需要处理异常(未找到文件/Dir),因此您最好忘记
FileInfo
s

SearchOption。所有目录
意味着您的代码将深入到(禁止的)领域

最好准备好处理这种错误。对于不捕获异常的解决方案,您需要
DirectoryInfo.GetFiles()
来获取FileInfo对象而不是字符串,并提前验证您的访问权限


但是由于并发性,您仍然需要处理异常(未找到文件/Dir),因此您最好忘记
FileInfo
s

您指定的是
SearchOption.AllDirectories
根据平均值

AllDirectory包括搜索操作中的当前目录和所有子目录。此选项包括重新分析点,如搜索中已安装的驱动器和符号链接


换言之,您的搜索是递归的,并进入到您没有读取权限的
文档和设置中。

您正在指定
搜索选项。所有目录
根据方法

AllDirectory包括搜索操作中的当前目录和所有子目录。此选项包括重新分析点,如搜索中已安装的驱动器和符号链接


换言之,您的搜索是递归的,并进入到您没有读取权限的
文档和设置中。

如果您将其更改为C:\Documents and Settings\?是否确保您拥有C:。如果它是一个web应用程序,请确保应用程序池用户拥有该目录的读取权限。我的天啊,非常抱歉。我有一个相当愚蠢的时刻。由于某种原因,我的大脑阻止了错误发生在它找到根源之后的可能性。我觉得自己有多傻!:)如果您将其更改为C:\Documents And Settings\?是否确保您对C:具有权限。如果它是一个web应用程序,请确保应用程序池用户拥有该目录的读取权限。我的天啊,非常抱歉。我有一个相当愚蠢的时刻。由于某种原因,我的大脑阻止了错误发生在它找到根源之后的可能性。我觉得自己有多傻!:)他可以访问程序文件而不能访问文档和设置,这不是很奇怪吗?@Peri对
程序文件
的读取权限不是很敏感(应该是共享的),而对
文档和设置
下用户的私人文件的读取权限是敏感的,对普通用户是禁止的。@JoachimIsaksson:错
Documents and Settings
是一个旧目录,其存在仅用于将用户帐户重定向到
C:\Users\*
。它没有读取权限,以防止人们在硬编码路径中使用它。@SLaks我想遗留状态取决于所涉及的操作系统,但您