我正在从微软的教程中学习"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",所以它们会从行中返回值。我怎样才能消除这个错误呢?
*对于文本文件,我也关闭了只读属性。
为什么会首先访问 "我的音乐 "文件夹?
因为你的
SearchOption
.SeachOption.AllDirectories
搜索当前目录下的文件以及所有子目录。
如果你想只在当前目录中搜索,而不是在它的子目录中搜索,那么,请将以下内容改为 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
};