有时需要 找特定的目录 比如 "Network\Admin" ( 不知用户 按了几个版本的oracle 若干目录 在机器上)
本来一个 DirectoryInfo 就可以解决问题。 但在使用中发现 很多目录 没权读 为此 DirectoryInfo 就歇了
只好写一个小的嵌套 一级一级的找 把程序 晒在这里供大家参考
// 在机器上找指定的目录
string all_dirs = "";
//所有的 硬盘 除了 CD (CDFS)可以加其他的限制
foreach (var d_v in System.IO.DriveInfo.GetDrives().Where(p=>p.DriveFormat !="CDFS"))
{
//从每一个盘的根开始找 l例如 c;\ Admin 是要找的目录
all_dirs += get_dir(new DirectoryInfo(d_v.Name), @"Network\Admin");
}
//你得到了
var dd = all_dirs.TrimEnd('!').Split('!');
///
/// <summary>
/// 嵌套 往下找 找到返回完整目录 没有 就给 空
/// </summary>
/// <param name="d_dir"></param> 这是一个DirectoryInfo
/// <param name="s_search"></param> 这是要找的 目录段
/// <returns></returns>
string get_dir(DirectoryInfo d_dir ,string s_search)
{
//现设一下空
string t_tt="";
try
{
//得到当前目录下的子目录 之一是下一及 如果没权 或其他问题 就不玩了 返回空
var dir_s = d_dir.GetDirectories();
//判断每一个子目录 如果有的话
foreach (var dd_dir in dir_s)
{
//如果子目录的结尾等于 要找的目录 就返回这个完整的目录
if (dd_dir.FullName.EndsWith(s_search))
{
t_tt += dd_dir.FullName+"!";
}
//如果 目录是"$" 开头 就不找这个目录的子目录了
else if (dd_dir.Name.StartsWith("$"))
{
}
else
{
//把这子目录当爹 用 get_dir 找他儿子(他的子目录)
t_tt += get_dir(new DirectoryInfo(dd_dir.FullName), s_search);
}
}
//返回找到的结果
return t_tt;
}
catch
{
//有错直接返回 比如 没有权读。。。
return t_tt;
}
}