C# 不使用预构建的.net对象获取所有子文件夹
我正在尝试获取W7机器的c:\Users\UserName目录中所有文件夹的列表 当我使用C# 不使用预构建的.net对象获取所有子文件夹,c#,.net,path,C#,.net,Path,我正在尝试获取W7机器的c:\Users\UserName目录中所有文件夹的列表 当我使用Directory.GetDirectories()或Directory.GetFiles()时,我遇到的问题是,我经常遇到“拒绝访问路径”的异常。我在管理员模式下运行了VS,但运气不好。我的报告解释了原因 我想知道如何获取所有子文件夹的名称(无论文件夹中是否有任何文件),其中子文件夹可能是N深的(因此,子文件夹的数量不确定),并将其存储为列表。这样,通过foreach循环,我可以根据特定的逻辑逐个检查文件
Directory.GetDirectories()
或Directory.GetFiles()
时,我遇到的问题是,我经常遇到“拒绝访问路径”的异常。我在管理员模式下运行了VS,但运气不好。我的报告解释了原因
我想知道如何获取所有子文件夹的名称(无论文件夹中是否有任何文件),其中子文件夹可能是N深的(因此,子文件夹的数量不确定),并将其存储为列表。这样,通过foreach循环,我可以根据特定的逻辑逐个检查文件夹,以确保我有访问权限,并且我想要访问
以下代码仅查看1级深度:
private List<string> GetAllFolders()
{
DirectoryInfo directoryInfo = new DirectoryInfo(this.sourceFolder);
List<string> allFolders = new List<string>();
foreach (DirectoryInfo subDirectoryInfo in directoryInfo.GetDirectories())
{
//logic
allFolders.Add(subDirectoryInfo.FullName);
}
return allFolders;
}
private List GetAllFolders()
{
DirectoryInfo DirectoryInfo=新的DirectoryInfo(this.sourceFolder);
List allFolders=新列表();
foreach(DirectoryInfo.GetDirectories()中的DirectoryInfo子目录yinfo)
{
//逻辑
添加(子目录yinfo.FullName);
}
返回所有文件夹;
}
是否有一种模式可以用于此,或者是否有人对如何继续进行有一个示例或建议?您就快到了
private List<string> GetAllFolders()
{
DirectoryInfo directoryInfo = new DirectoryInfo(this.sourceFolder);
List<string> allFolders = new List<string>();
foreach (DirectoryInfo subDirectoryInfo in directoryInfo.GetDirectories(("*.*", SearchOption.AllDirectories))
{
//logic
allFolders.Add(subDirectoryInfo.FullName);
}
return allFolders;
}
private List GetAllFolders()
{
DirectoryInfo DirectoryInfo=新的DirectoryInfo(this.sourceFolder);
List allFolders=新列表();
foreach(DirectoryInfo.GetDirectories((“**”,SearchOption.AllDirectories)中的DirectoryInfo子目录yinfo)
{
//逻辑
添加(子目录yinfo.FullName);
}
返回所有文件夹;
}
关于访问权限,您可能无法访问每个文件夹的末尾,但我认为在某些特殊文件夹中会发生这种情况,您必须以某种方式自行处理这些问题。否则,这种方法可以正常工作
另外,请看:您就快到了
private List<string> GetAllFolders()
{
DirectoryInfo directoryInfo = new DirectoryInfo(this.sourceFolder);
List<string> allFolders = new List<string>();
foreach (DirectoryInfo subDirectoryInfo in directoryInfo.GetDirectories(("*.*", SearchOption.AllDirectories))
{
//logic
allFolders.Add(subDirectoryInfo.FullName);
}
return allFolders;
}
private List GetAllFolders()
{
DirectoryInfo DirectoryInfo=新的DirectoryInfo(this.sourceFolder);
List allFolders=新列表();
foreach(DirectoryInfo.GetDirectories((“**”,SearchOption.AllDirectories)中的DirectoryInfo子目录yinfo)
{
//逻辑
添加(子目录yinfo.FullName);
}
返回所有文件夹;
}
关于访问权限,您可能无法访问每个文件夹的末尾,但我认为在某些特殊文件夹中会发生这种情况,您必须以某种方式自行处理这些问题。否则,这种方法可以正常工作
另外,请参见:我没有运行此代码,但您必须递归地遍历文件夹。除了“捕获并继续”之外,我没有添加任何异常处理
private List<string> GetAllFolders()
{
var allFolders = new List<string>();
return GetAllFolders(this.sourceFolder);
}
// recursively list all folders, catch and continue in case of errors
private List<string> GetAllFolders(string folder)
{
DirectoryInfo directoryInfo = new DirectoryInfo(folder);
List<string> allFolders = new List<string>();
foreach (DirectoryInfo subDirectoryInfo in directoryInfo.GetDirectories())
{
//logic
try {
allFolders.Add(subDirectoryInfo.FullName);
allFolders.AddRange(GetAllFolders(subDirectoryInfo.FullName));
}
catch (Exception exp)
{
// log rrors
Debug.WriteLine(" exception for " +
subDirectoryInfo.FullName + " : " +
exp.Message);
}
}
return allFolders;
}
private List GetAllFolders()
{
var allFolders=新列表();
返回GetAllFolders(this.sourceFolder);
}
//递归列出所有文件夹,捕获并在出现错误时继续
私有列表GetAllFolders(字符串文件夹)
{
DirectoryInfo DirectoryInfo=新的DirectoryInfo(文件夹);
List allFolders=新列表();
foreach(DirectoryInfo.GetDirectories()中的DirectoryInfo子目录yinfo)
{
//逻辑
试一试{
添加(子目录yinfo.FullName);
AddRange(GetAllFolders(子目录yinfo.FullName));
}
捕获(异常扩展)
{
//日志错误
Debug.WriteLine(“异常为”+
子目录yinfo.FullName+“:”+
exp.Message);
}
}
返回所有文件夹;
}
我没有运行此代码,但您必须递归地遍历文件夹。除了“捕获并继续”之外,我没有添加任何异常处理
private List<string> GetAllFolders()
{
var allFolders = new List<string>();
return GetAllFolders(this.sourceFolder);
}
// recursively list all folders, catch and continue in case of errors
private List<string> GetAllFolders(string folder)
{
DirectoryInfo directoryInfo = new DirectoryInfo(folder);
List<string> allFolders = new List<string>();
foreach (DirectoryInfo subDirectoryInfo in directoryInfo.GetDirectories())
{
//logic
try {
allFolders.Add(subDirectoryInfo.FullName);
allFolders.AddRange(GetAllFolders(subDirectoryInfo.FullName));
}
catch (Exception exp)
{
// log rrors
Debug.WriteLine(" exception for " +
subDirectoryInfo.FullName + " : " +
exp.Message);
}
}
return allFolders;
}
private List GetAllFolders()
{
var allFolders=新列表();
返回GetAllFolders(this.sourceFolder);
}
//递归列出所有文件夹,捕获并在出现错误时继续
私有列表GetAllFolders(字符串文件夹)
{
DirectoryInfo DirectoryInfo=新的DirectoryInfo(文件夹);
List allFolders=新列表();
foreach(DirectoryInfo.GetDirectories()中的DirectoryInfo子目录yinfo)
{
//逻辑
试一试{
添加(子目录yinfo.FullName);
AddRange(GetAllFolders(子目录yinfo.FullName));
}
捕获(异常扩展)
{
//日志错误
Debug.WriteLine(“异常为”+
子目录yinfo.FullName+“:”+
exp.Message);
}
}
返回所有文件夹;
}
public void GetFolderList()
{
var list=新列表();
var root=newdirectoryinfo(“c:\\”);
GetFoldersRecursive(根目录,列表);
}
私有静态void GetFoldersRecursive(目录信息根目录,列表)
{
目录信息[]儿童;
尝试
{
list.Add(root.FullName);
children=root.GetDirectories();
}
捕获(未经授权的访问例外)
{
//拒绝访问
回来
}
foreach(儿童中的变量d)
GetFoldersRecursive(d,列表);
}
如果您喜欢使用更复杂的权限检查(而不是捕获异常),我建议您查看一下
{
var list=新列表();
var root=newdirectoryinfo(“c:\\”);
GetFoldersRecursive(根目录,列表);
}
私有静态void GetFoldersRecursive(目录信息根目录,列表)
{
目录信息[]儿童;
尝试
{
list.Add(root.FullName);
children=root.GetDirectories();
}
捕获(未经授权的访问例外)
{
//拒绝访问
回来
}
foreach(儿童中的变量d)
GetFoldersRecursive(d,列表);
}
如果您喜欢使用更复杂的权限检查(而不是捕获异常),我建议您查看一下谢谢,但是我如何使用t处理访问权限