运行到错误 "拒绝访问路径'C:\Users\Work & School\Documents\My Music'。" C#-App控制台

问题描述 投票:0回答:1

我正在从微软的教程中学习"https:/docs.microsoft.comen-usdotnetstandardio如何列举目录和文件。"

具体来说,就是这个。

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",所以它们会从行中返回值。我怎样才能消除这个错误呢?

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

c# file directory enumeration
1个回答
2
投票

为什么会首先访问 "我的音乐 "文件夹?

因为你的 SearchOption. SeachOption.AllDirectories 搜索当前目录下的文件以及所有子目录。

如果你想只在当前目录中搜索,而不是在它的子目录中搜索,那么,请将以下内容改为 SearchOptionSeachOption.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)

© www.soinside.com 2019 - 2024. All rights reserved.