Regex для обнаружения только одинарного обратного sla sh и замены на двойной - PullRequest
0 голосов
/ 06 мая 2020

Моя функция получает сетевой путь из разных мест.

Некоторые люди отправляют правильный путь как:

\\\\ 127.0.0.1 \\ Folder1 \\ Folder2 \\ File.txt

Но некоторые этого не делают. Они отправляют:

\\ 127.0.0.1 \ Folder1 \ Folder2 \ File.txt

Поскольку мой код находится в VB, это не вызывает проблем. Я должен отправить это далее в API, который находится в C#, и он выдает ошибку во втором случае.

Теперь я хочу, чтобы второй тип пути был преобразован в первый. Но если путь уже в первом формате, ничего не делайте.

Если я заменю \ на \\, он изменит первый тип пути на:

\\ \\\\\\ 127.0.0.1 \\\\ Folder1 \\\\ Folder2 \\\\ File.txt

Чего не должно происходить. Преобразование должно происходить только в том случае, если на пути есть один sla sh.

Что можно сделать?

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Вы можете использовать IO.Path.GetFullPath для нормализации пути:

Dim p = "\\\\127.0.0.1\\Folder1\\Folder2\\File.txt"
Dim q = IO.Path.GetFullPath(p)
Console.WriteLine(q)

Выходы:

\\\127.0.0.1\Folder1\Folder2\File.txt

Итак, теперь у вас есть согласованная начальная точка - за исключением тройного backsla sh, на который я не нашел ссылки в форматах путей к файлам в Windows системах .

Итак, наконец,

Dim q = IO.Path.GetFullPath(p).Replace("\\\", "\\").Replace("\", "\\")

дает

\\\\127.0.0.1\\Folder1\\Folder2\\File.txt

даже при вводе \\127.0.0.1\Folder1\Folder2\File.txt.

1 голос
/ 06 мая 2020

Если вы не хотите использовать Regex, попробуйте следующее:

Dim path As String = "\\127.0.0.1\Folder1\Folder2\File.txt"

If Not path.StartsWith("\\\\") Then path = path.Replace("\", "\\")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...