protected void Button1_Click(object sender, EventArgs e)
{
string path = "";
string physicsPath = Server.MapPath(Request.ApplicationPath); //将当前虚拟根路径转为实际物理路径
string toFindDirectoryName = "ss"; //要查找的文件夹名
FindDirectory(physicsPath + "\\", toFindDirectoryName, out path);//用递归的方式去查找文件夹
if (!string.IsNullOrEmpty(path)) //如果存在,返回该文件夹所在的物理路径
{
//将该物理路径转为虚拟路径
Response.Write(GetVirtualPath(path, Request.ApplicationPath));
}
else
{
//没有找到路径,创建新文件夹
Directory.CreateDirectory(physicsPath + "\\" + toFindDirectoryName);
}
}
/// <summary>
/// 将物理路径转为虚拟路径
/// </summary>
/// <param name="physicsPath">物理路径</param>
/// <param name="virtualRootPath">虚拟根路径</param>
/// <returns></returns>
private string GetVirtualPath(string physicsPath, string virtualRootPath)
{
int index = physicsPath.IndexOf(virtualRootPath.Substring(1));
return "/" + physicsPath.Substring(index).Replace("\\", "/");
}
/// <summary>
/// 在指定目录下递归查找子文件夹
/// </summary>
/// <param name="bootPath">根文件夹路径</param>
/// <param name="directoryName">要查找的文件夹名</param>
private void FindDirectory(string bootPath, string directoryName, out string filePath)
{
//在指定目录下递归查找子文件夹
DirectoryInfo dir = new DirectoryInfo(bootPath);
filePath = "";
try
{
foreach (DirectoryInfo d in dir.GetDirectories()) //查找子文件夹
{
if (d.Name == directoryName) //找到,返回文件夹路径
{
filePath = d.FullName;
break;
}
FindDirectory(bootPath + d.Name + "\\", directoryName, out filePath); //否则继续查找
}
}
catch (Exception e)
{
Response.Write(e.Message);
}
}