运行 进入错误 "Access to the path 'C:\Users\Work & School\Documents\My Music' is denied." C#-App 控制台

Running into error "Access to the path 'C:\Users\Work & School\Documents\My Music' is denied." C#-App console

我正在学习微软的教程“https://docs.microsoft.com/en-us/dotnet/standard/io/how-to-enumerate-directories-and-files

具体来说,这个:

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' 被拒绝。

我想知道,为什么它首先要访问“我的音乐”文件夹,而它应该做的只是访问“文档”?此外,我还尝试从单独的文件夹中删除 Music 文件夹,但我仍然遇到同样的错误。我还在文档文件夹中放置了两个文本文件,都指定了 "Microsoft",因此它们将 return 来自行的值。我该如何消除错误?

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

为什么首先访问“我的音乐”文件夹?

Because of your SearchOption. SeachOption.AllDirectories searches file in current directory as well as all its subdirectories.

如果您只想在当前目录中搜索而不是在其子目录中搜索,请将 SearchOption 更改为 SeachOption.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
           };

SearchOption Enum (From MSDN)