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#. (если вы не используете@"\")

Если вы используете \\ в поле базы данных первый \\ будет рассматриваться как корневой путь и, вероятно, удалит предыдущий путь.

Другие вопросы по тегам