替换UNC路径中的ServerName

时间:2013-03-15 20:17:05

标签: c# unc replace

我想编写一个方法来替换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();

5 个答案:

答案 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('\\'));

或者使用SubstringIndexOf方法;

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();