如何在** D:\ myfolder **中使用C#获取名为******的直接目录列表
我尝试过
String root = @"E:\something-*";
var directories = Directory.GetDirectories(root);
但实际上提供了错误信息,E:\的列表也将空作为变量目录中的值。
我还尝试在stackoverflow和其他论坛上寻找可能的解决方案,但没有得到对我的查询的任何适当答案。
答案 0 :(得分:0)
您需要获取具有搜索模式并准备正确模式以进行搜索的GetDirectories超载
String root = @"E:\something-*";
string parent = Path.GetDirectoryName(root);
// A little trick, here GetFilename will return "something-*"
string search = Path.GetFileName(root);
var dirs = Directory.GetDirectories(parent, search);
还有第三个重载,允许您在父文件夹下递归搜索模式
var dirs = Directory.GetDirectories(parent, search, SearchOption.AllDirectories);
您遇到的问题是由于系统目录(例如系统卷信息)的存在而导致的,您没有权限在该目录上读取其内容。 MSDN提供了一个如何克服这种情况的示例,并且可以通过一些小的更改(例如下面的更改)来适应您的要求
// Call the WalkDirectoryTree with the parameters below
// Notice that I have removed the * in the search pattern
var dirs = WalkDirectoryTree(@"E:\", @"something-");
List<string> WalkDirectoryTree(string root, string search)
{
try
{
var files = Directory.GetFiles(root, "*.*");
}
// This is thrown if even one of the files requires permissions greater
// than the application provides.
catch (UnauthorizedAccessException e)
{
// This code just writes out the message and continues to recurse.
// You may decide to do something different here. For example, you
// can try to elevate your privileges and access the file again.
Console.WriteLine(e.Message);
return new List<string>();
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
return new List<string>();
}
// Now find all the subdirectories under this directory.
List<string> subDirs = new List<string>();
List<string> curDirs = Directory.GetDirectories(root).ToList();
foreach (string s in curDirs)
{
if(s.StartsWith(search))
subDirs.Add(s);
var result = WalkDirectoryTree(s, search);
subDirs.AddRange(result);
}
return subDirs;
}
答案 1 :(得分:0)
这里是一个示例,它将编译与Path中存在的SearchPatn匹配的DirectoryInfo对象(目录)的数组。 因此,如果Path等于“ D:\ myfolders \”,SearchPatn等于“ something- *”,您将得到类似以下内容的结果:something-abc,something-xyz作为可以操作的文件夹。
使用searchOption的警告:AllDirectories将搜索路径下方的所有文件夹,并返回找到的所有内容。如果只希望从根目录访问文件夹,请使用TopDirectoryOnly searchOption。
// this returns an array of folders based on the SearchPatn (i.e., the folders you're looking for)
private DirectoryInfo[] getSourceFolders(string Path, string SearchPatn)
{
System.IO.DirectoryInfo[] f = new DirectoryInfo(Path).GetDirectories(SearchPatn, searchOption: SearchOption.AllDirectories);
return f;
}