0

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

5 に答える 5

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);
于 2013-03-15T20:28:33.900 に答える
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 に答える
0

あなたが es で何を試したのかわかりませんRegexが、これは基本的にあなたが探していることをするはずだと思います:

var path = @"\\server1\folder\child";
var replaced = Regex.Replace(path, @"\\\\[A-Za-z0-9]*\\", @"\\server2\");
于 2013-03-15T20:30:04.963 に答える