0

我想编写一种方法来换出 UNC 路径中的服务器名称。所以如果我有"\\server1\folder\child"我想换"\\server2\folder\child"。.net 处理反斜杠(正则表达式、Path.Combine)的各种尝试都遇到了锯齿状的边缘。我不会在运行时知道“server1”的名称。

这是我在 LinqPad 中测试的一个片段,虽然它看起来很 hacky:

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

5 回答 5

3

你走在正确的道路上(没有双关语)

快速编辑您的代码留下以下内容:

string path = @"\\server1\folder\child";

var uri = new Uri(path);

string newPath = @"\\server2" + uri.AbsolutePath.Replace('/', '\\');

var x = new Uri(newPath);
于 2013-03-15T20:26:05.700 回答
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);
于 2013-03-15T20:28:33.900 回答
0

我不确定您使用Regexes 尝试了什么,但我认为这基本上应该可以满足您的需求:

var path = @"\\server1\folder\child";
var replaced = Regex.Replace(path, @"\\\\[A-Za-z0-9]*\\", @"\\server2\");
于 2013-03-15T20:30:04.963 回答
0
string ReplaceServer(string path, string newServer)
    {
        return path.Replace(path.Split('\\')[2], newServer);
    }
于 2013-03-15T20:30:54.263 回答
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();
于 2013-03-15T20:50:05.760 回答