“遇到错误”;访问路径';C:\Users\Work&;学校\文档\我的音乐';被拒绝。”;C#-应用程序控制台

“遇到错误”;访问路径';C:\Users\Work&;学校\文档\我的音乐';被拒绝。”;C#-应用程序控制台,c#,file,directory,enumeration,C#,File,Directory,Enumeration,我正在从microsoft“”的教程中学习 具体来说,这一点: using System; using System.IO; using System.Linq; class Program { static void Main(string[] args) { try { // Set a variable to the My Documents path. string docPath =

我正在从microsoft“”的教程中学习

具体来说,这一点:

using System;
using System.IO;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // Set a variable to the My Documents path.
            string docPath =
            Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            var files = from file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories)
                        from line in File.ReadLines(file)
                        where line.Contains("Microsoft")
                        select new
                        {
                            File = file,
                            Line = line
                        };

            foreach (var f in files)
            {
                Console.WriteLine($"{f.File}\t{f.Line}");
            }
            Console.WriteLine($"{files.Count().ToString()} files found.");
        }
        catch (UnauthorizedAccessException uAEx)
        {
            Console.WriteLine(uAEx.Message);
        }
        catch (PathTooLongException pathEx)
        {
            Console.WriteLine(pathEx.Message);
        }
    }
}
但是,当我运行此文件时,遇到以下错误:

对路径“C:\Users\Work&School\Documents\My Music”的访问被拒绝

我想知道,为什么它首先要访问我的音乐文件夹,而它所要做的只是访问文档?此外,我还尝试从一个单独的文件夹中删除音乐文件夹,但最终还是出现了相同的错误。我还将两个文本文件放在文档文件夹中,都指定了“Microsoft”,这样它们将从行中返回值。我怎样才能消除这个错误呢


*对于文本文件,我还关闭了只读属性

为什么它首先要访问我的音乐文件夹

因为您的
搜索选项
seacoption.AllDirectories
搜索当前目录及其所有子目录中的文件

如果只想在当前目录而不是其子目录中搜索,请将
SearchOption
更改为
seacoption.TopDirectoryOnly

更新后的代码应该如下所示:

 var files = from file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.TopDirectoryOnly)
           from line in File.ReadLines(file)
           where line.Contains("Microsoft")
           select new
           {
                 File = file,
                 Line = line
           };