Path.Combine не работает при объединении пути удаленного сервера с путем к файлу
В приложении ASP.NET MVC я пытаюсь объединить два пути, путь удаленного сервера с путем, извлеченным из базы данных. Я выступаю ниже:
string serverPath = @"\\myServer\TempFolder";
string filePath = GetPathFromDatabaseTable();
string finalPath = System.IO.Path.Combine(serverPath, filePath);
Метод GetPathFromDatabaseTable возвращает эту строку:
\\path\\to\\file.pdf
При объединении с использованием Path.Combine результат, полученный в finalPath, будет следующим:
\\path\\to\\file.pdf
Таким образом, префикс serverPath \myServer\TempFolder удаляется. Почему происходит?
3 ответа
Вы можете использовать Uri
класс для достижения объединения удаленного и локального пути:
string serverPath = @"\\myServer\TempFolder";
string filePath = "\\path\\to\\file.pdf";
Uri serverUri = new Uri(serverPath + filePath);
string finalPath = serverUri.LocalPath;
Что возвращается
\\myserver\TempFolder\path\to\file.pdf
Удаление ведущей косой черты в начале от filePath работает, как описано здесь в решении.
поэтому, если в базе данных хранится как \ path \ to \ file.pdf, тогда, когда я читаю из базы данных, я сбрасываю ведущую косую черту в начале, поэтому метод GetPathFromDatabaseTable возвращает:
path\\to\\file.pdf
вместо того:
\\path\\to\\file.pdf
поэтому при объединении с использованием System.IO.Path.Combine он отлично работает.
Запрос возвращается \\path\\to\\file.pdf
в яблочко? или это только представление в отладчике C#.
Вы не должны хранить\\
как разделитель каталогов в поле базы данных. то\\
требуется только для экранирования строки, когда вы пишете ее на C#. (если вы не используете@"\"
)
Если вы используете \\
в поле базы данных первый \\
будет рассматриваться как корневой путь и, вероятно, удалит предыдущий путь.