|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:)</p>弁言
在做文件路径处置时,常常必要对一个路径的绝对路径举行操纵,那末怎样拼合绝对路径以天生新的相对路径呢?
Path.Combine()办法我们晓得System.IO.Path是专门用来处置路径的静态类,它有一个Combine()办法就是用于拼接路径的,我们来测试一下其拼接效果。
我们利用一个命令路程序举行测试,这里要测试相对文件C:abc123avatar.html的一系列绝对路径,测试代码以下:
classProgram
{
staticstringpath=@"C:abc123avatar.html";
staticvoidMain(string[]args)
{
Console.WriteLine(path);
Console.WriteLine("输出绝对路径以完成兼并:");
Console.WriteLine();
while(true)
{
Console.WriteLine("兼并为:"+兼并路径(Console.ReadLine()));
Console.WriteLine();
}
}
privatestaticstring兼并路径(stringp)
{
returnPath.Combine(Path.GetDirectoryName(path),p);
}
}
个中“兼并路径”办法的功效是先猎取文件的地点目次,再与绝对路径拼合。
测试了局:
能够看到,惯例的路径拼合没有成绩,可是输出“..”就没有被准确处置为下级目次,而是间接举行了兼并,这不是我希冀看到的。
如何做才干撑持“..”情势的绝对路径呢?
使用Uri工具的机关函数我发明Uri工具在机关时能够传进一个基于的Uri及一个绝对路径以机关为新的Uri,而我们能够以“file://……”的情势来暗示当地文件路径,让我们修改一下代码,举行一下绝对Uri的拼合测试。
修改后的代码:
classProgram
{
//staticstringpath=@"C:abc123avatar.html";
staticstringpath=@"file:///C:/abc/123/avatar.html";
staticvoidMain(string[]args)
{
Console.WriteLine(path);
Console.WriteLine("输出绝对路径以完成兼并:");
Console.WriteLine();
while(true)
{
//Console.WriteLine("兼并为:"+兼并路径(Console.ReadLine()));
Console.WriteLine("兼并为:"+兼并Uri(Console.ReadLine()));
Console.WriteLine();
}
}
privatestaticstring兼并路径(stringp)
{
returnPath.Combine(Path.GetDirectoryName(path),p);
}
privatestaticstring兼并Uri(stringp)
{
returnnewUri(newUri(path),p).AbsoluteUri;
}
}
测试了局:
好极了,完善撑持“../”情势的绝对路径!
完美那末接上去的事情就是将路径转换为Uri情势,然后拼合绝对路径,再转换回路径情势就能够了。
转换的时分仅仅是接纳字符串处置的办法,修改后的代码以下:
classProgram
{
staticstringpath=@"C:abc123avatar.html";
staticvoidMain(string[]args)
{
Console.WriteLine(path);
Console.WriteLine("输出绝对路径以完成兼并:");
Console.WriteLine();
while(true)
{
Console.WriteLine("兼并为:"+兼并路径(Console.ReadLine()));
Console.WriteLine();
}
}
privatestaticstring兼并路径(stringp)
{
returnnewUri(newUri("file:///"+path.Replace("","/")),p.Replace("","/")).AbsoluteUri.Substring(8).Replace("/","");
}
}
测试了局:
结语了局很使人中意,但我总以为这是个土方剂、盗窟举措,谁有更烦琐、正统点的办法吗?
感激天方这么快就提出了正统的写法:Path.GetFullPath(Path.Combin(@"C:ac","...text"));
我之前找了那末久,又折腾那末久,才弄出个盗窟的来,其实汗颜啊,呵呵。
也许唯一可以让世人留恋Java的理由就剩下它的王牌——跨平台。 |
|