2015-05-06 3 views
-3

У меня есть файлы на локальном сервере с адресом \\localServerAddress\Folder\Program.exe. Мне нужно удалить адрес сервера динамически и заменить его на другой адрес сервера, который выбирается в другом месте в форме. Имена серверов могут быть разной длины, поэтому я не могу использовать функцию string.Substring.Изменение имен хостов динамически

Так дали на вход

\\localServerAddress\Folder\Program.exe 

Я хотел бы результат

\\differentServerAddress\Folder\Program.exe 
+7

Итак, как вы знаете, что вы * действительно * хочу раздеть, если это не всегда '\ test'? Ваши требования довольно неясны. –

+0

Это место сервера, которое мне нужно изменить. у нас есть несколько серверов с одинаковой файловой структурой. Мне нужно будет переместить файлы с одного сервера на другой, следовательно, удалив имя сервера, и я заменил его новым адресом сервера. –

+0

В вашем примере есть два теста «\\». Который должен идти? – DrKoch

ответ

2

Если вы всегда работаете с UNCs

Тогда

string toRemove = new Uri(yourString).host; 
string newString = yourString.Replace(String.format(@"\\{0})",toRemove) 
            , String.format(@"\\{0})",whateveryouwant)); 
+0

Что означает UNC? –

+0

Универсальная конвенция об именах. В операционных системах Windows формат UNC-имен: \\ имя_сервера \ имя_архива \ путь \ имя_файла – Mike

+0

Предположим, что это не UNC, потому что я не знаю, насколько это известно. –

1

Используйте этот метод:

string changeServerInPathString(string originalString, string newServer) 
    { 
     List<string> stringParts = originalString.TrimStart('\\').Split('\\').ToList(); 
     stringParts.RemoveAt(0); 
     stringParts.Insert(0, newServer); 
     return string.Join("\\", stringParts.ToArray()).Insert(0, "\\\\"); 
    } 
+0

Невозможно преобразовать из 'System.Collections.Generic.Список 'to' string [] ' –

+0

Ошибка - исправлена ​​ошибка. Попробуй это сейчас. – Pittmyster

+0

Это хорошо, за исключением того, что оно не добавляет имя папки и дальше. Пример: localServer \ FolderName \ Test.program будет перемещен в NYCServer \ SameFolderName \ Test.program. Единственное, что нужно сделать, это удалить имя сервера, но сохранить остальную информацию –

-1
string text = @"\\test\FolderName\foo.exe"; 
    text = text.Replace('\\', '-'); \\ this is done as I was not able to make the regex **\\\\\\(.)*?\\** , work. 
    Regex rg = new Regex("--.*?-"); \\ if in case the above mentioned regex is made to work correctly please replace the regex with the same. 
    text = rg.Replace(text, ""); 
    Console.WriteLine(text.Replace('-', '\\')); 

    Console.Read(); 
0

Вы можете использовать что-то вроде этого:

void Main() 
{ 
    string path = @"\\localServerAddress\Folder\Program.exe"; 

    UriBuilder bld = new UriBuilder(path); 
    bld.Host = "NewServer"; 
    Console.WriteLine(bld.Uri.LocalPath); 
} 

Результат: \\newserver\Folder\Program.exe

Смежные вопросы