Path.Combine не работает при объединении пути к удаленному серверу с путем к файлу - PullRequest
1 голос
/ 21 апреля 2020

Из приложения 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 ]

1 голос
/ 21 апреля 2020

Вы можете использовать класс 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
0 голосов
/ 22 апреля 2020

Удаление начального sla sh в начале из filePath работает, как объяснено здесь в решении.

, поэтому, если в базе данных хранится как \ path \ to \ file.pdf затем, когда я читаю из базы данных, я в начале отбрасываю ведущий sla sh, поэтому метод GetPathFromDatabaseTable возвращает:

path\\to\\file.pdf

вместо:

\\path\\to\\file.pdf

, поэтому при объединении с использованием System .IO.Path.Combine работает отлично.

0 голосов
/ 21 апреля 2020

Точно ли запрос возвращает \\path\\to\\file.pdf? или это только представление в c# отладчике.

Вы должны не хранить \\ в качестве разделителя каталогов в поле базы данных. \\ требуется только для экранирования строки, когда вы пишете ее в c#. (если вы не используете @"\")

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

...