2014-01-27 4 views
1

Я пытаюсь создать путь, используя Path.Combine(), но я получаю неожиданные результаты.Path.Combine() возвращает неожиданные результаты

using System; 
using System.IO; 

namespace PathCombine_Delete 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string destination = "D:\\Directory"; 
      string destination02 = "it"; 
      string path = "L:\\MyFile.pdf"; 
      string sourcefolder = "L:\\";//In other instances, it could be L:\\SomeFolder\AndMayBeAnotherFolder 
      string replacedDetails = path.Replace(sourcefolder + "\\", ""); 

      string result = Path.Combine(destination, destination02, replacedDetails); 

      Console.WriteLine(result); 
      Console.ReadKey();//Keep it on screen 
     } 
    } 
} 

Я ожидал бы результат D:\\Directory\it\MyFile.pdf, но вместо этого, я получаю L:\MyFile.pdf

Я не могу понять, почему? Я признаю, что здесь поздно вечером, но все же, я использовал Path.Combine много раз, а с .NET 4.0 он позволяет передать параметр строки. Однако он, кажется, игнорирует первые 2 и только читает последнее.

+0

Возможно, он использует только последний доступный корневой узел. – Magus

+0

Можете ли вы объяснить, желательно, чтобы некоторые примеры ввода и вывода, что этот код должен делать? – CodeCaster

ответ

3

Здесь ошибка

string replacedDetails = path.Replace(sourcefolder + "\\" , ""); 

Вы добавляете другой обратный слэш и ничего не найдено в замене.
Удаление добавляемые обратной косой черты дает правильную строку для поиска и замены

string replacedDetails = path.Replace(sourcefolder , ""); 

однако вы могли бы избежать всего, что заменить материал и промежуточные переменные только с

string result = Path.Combine(destination, destination02, Path.GetFileName(path)); 
+0

Ну, ты прав, но я все равно не понимаю. Я добавил часы к 'string result = Path.Combine (destination, destination02, replaceDetails);' и навел указатель мыши на каждое имя переменной, и каждое имя было таким, как ожидалось. Я не понимаю, почему путь не был объединен. – Dave

+0

Представление обратной косой черты вводит в заблуждение. – Steve

3

Я рекомендовал бы использовать:

string replacedDetails = Path.GetFileName(path); 

Это приведет к удалению исходной папки с пути без замены строки, которая не является Если вы получаете path из других источников (в конечном итоге), обязательно обязательно.

1

У вас read the documentation? Вы проверили, что вы переезжаете на Path.Combine()? documentation говорит, цитирую:

path1 должен быть абсолютный путь (например, "D: \ архивы" или "\ Archives \ Public"). Если path2 или path3 также является абсолютным путем, операция объединения отменяет ранее объединенные пути и сбрасывается до этого абсолютного пути.

Это должно намекнуть на проблему.

+0

Да, я прочитал его (я даже связался с ним в своем посте), но это не впитывалось ... Однако я думал из-за функции замены строки я не проходил абсолютный путь. Я проходил «L: \\ MyFile.pdf.Replace (L: \\," ")', который сделал 'MyFile.pdf'. Теперь я понимаю, так что спасибо – Dave

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