我想编写一个方法来替换UNC路径中的服务器名称。所以,如果我有"\\server1\folder\child"
,我想交换"\\server2\folder\child"
。执行此操作的各种尝试都遇到了.net处理反斜杠(正则表达式,Path.Combine)的锯齿状边缘。我不会在运行时知道“server1”的名称。
这是我在LinqPad中测试过的一个片段,虽然它的工作原理看起来很漂亮:
string path = @"\\server1\folder\child";
var uri = new Uri(path);
string newPath = @"\\server2\";
foreach (var part in uri.Segments)
{
if (part == "/")
continue;
newPath += part;
}
var x = new Uri(newPath);
uri.Dump();
x.LocalPath.Dump();
答案 0 :(得分:3)
你走在正确的道路上(没有双关语)
快速编辑您的代码:
string path = @"\\server1\folder\child";
var uri = new Uri(path);
string newPath = @"\\server2" + uri.AbsolutePath.Replace('/', '\\');
var x = new Uri(newPath);
答案 1 :(得分:1)
使用string.Format
方法尝试此操作;
string path = @"\\server1\folder\child";
string server = "server2";
string newPath = string.Format(@"\{0}\{1}" + server + @"\{3}\{4}",
path.Split('\\'));
或者使用Substring
和IndexOf
方法;
string s = @"\\server1\folder\child";
string server = @"\\server2";
string s2 = server + s.Substring( s.Substring(2).IndexOf(@"\")+2);
答案 2 :(得分:0)
我不确定您使用Regex
es尝试了什么,但我认为这基本上应该是您正在寻找的内容:
var path = @"\\server1\folder\child";
var replaced = Regex.Replace(path, @"\\\\[A-Za-z0-9]*\\", @"\\server2\");
答案 3 :(得分:0)
string ReplaceServer(string path, string newServer)
{
return path.Replace(path.Split('\\')[2], newServer);
}
答案 4 :(得分:0)
并证明有一千种不同的方法可以给猫皮肤涂抹:
string oldPath = "\\testserver1\\folder\\child";
string newServer ="testserver2";
var subPath = oldPath.Split(new []{'\\'},StringSplitOptions.RemoveEmptyEntries)
.Skip(1)
.Take(Int32.MaxValue)
.ToList();
subPath.Insert(0,newServer);
var newPath = Path.Combine(subPath.ToArray());
newPath = @"\\"+newPath;
newPath.Dump();