日期:2014-05-17  浏览次数:20474 次

获取文件的虚拟路径
文件夹1,有两个子文件夹11,12
文件夹11,有两个子文件夹112,113
文件夹12,有两个子文件夹121,123
操作112中页面的时候怎么获取121文件夹的虚拟路径
就是获取同一祖父,不同父亲的,文件夹的虚拟路径

------解决方案--------------------
Page.ResolveUrl("~/1/11/112")

都从根目录开始
------解决方案--------------------
HTML code

("../../12/121/main.png")

------解决方案--------------------
只给思路:

1,你先获取当前操作的文件夹相对于根目录来说,是第几层文件夹,也就是深度n

string str_Sub_dir=???;//这里你直接取得当前文件夹的绝对路径(可根据官方提供的内置对象的相应属性取到该值)
string str_Root_dir=??;//这里你直接取得当前文件夹的绝对路径(可根据官方的内置对象提供的方法取到该值,比如~根等号)

string str_Taget_dir="123";//最终目标路径
string temp_dir="";

int n=0;//当前文件夹相对于根目录的深度
while(str_Sub_dir!=str_Root_dir)
{
//比较当前文件夹绝对路径与根目录绝对路径,如果不等,则
int index=str_Sub_dir.LastIndexOf('/'); //这里获取子文件夹的绝对路径中的最后一个'/'符号的位置(因为这时候,无论是子文件夹路径还是根目录路径,都是常规的C:/myobjects/object1/1/12/123这样)

temp_dir=str_Sub_dir.Substring(index,str_Sub_dir.Length-index);//这里是获取最后一个/后面的路径部分
str_Taget_dir="/"+str_Taget_dir;//这里,在目录路径前面添加一个/符号,也就是/12/123这种,循环一次加一个


str_Sub_dir=str_Sub_dir.Substring(0, index); //这里,把子文件夹的最后一个'/'符号后面的路径截断,相当于取得了当前操作文件夹的父目录路径(这个截断字长,我没测试过,你自己慢慢调,反正就是+1或-1位置)

n++;//这里记录深度,实际上这个记录深度只是方便一下而已,要不要你自己看着处理

//接下来,因为上面已从子文件夹回退到父文件夹,将继续循环,直到退回到根目录,这时候才算是记录完深度n


}


//你得到了当前操作的子文件夹相对于根目录的深度n,则可以取得想要的其它子文件夹的相对路径了


比如,你现在n=5,也就是你处于第5层子文件夹,那么,你想获取第3层里的子目录123的路径,则


string arry_dir= str_Taget_dir.Split(new char[] { '/' }); //这里,把目标路径用/拆分成数组
(比如myobjects/object1/1/12/123这样的路径,肯定被拆成5组了)

string result=arry_dir[0]+"/"+arry_dir[3]+"/"+arry_dir[4]; //楼主你自己分析这时候的路径是什么吧

//我上面只是说思路,你可以自己改进