Path.Combine()返回意外结果

时间:2014-01-27 19:48:10

标签: c# path

我正在尝试使用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以来它允许传递字符串参数。但是,它似乎忽略了前两个,只读了最后一个。

3 个答案:

答案 0 :(得分:4)

这是错误

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

您正在添加另一个反斜杠,但没有发现任何替换 删除添加的反斜杠可以提供正确的字符串来搜索和替换

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

但是你可以避免所有用

替换东西和中间变量
 string result = Path.Combine(destination, destination02, Path.GetFileName(path));

答案 1 :(得分:3)

我建议使用:

  string replacedDetails = Path.GetFileName(path);

这将处理从路径中删除源文件夹而不使用字符串替换,如果你从其他地方(最终)获得path,这不一定可靠。

答案 2 :(得分:1)

你有read the documentation吗?您是否已验证传递给Path.Combine()的内容? documentation说,我引用:

  

path1 应该是绝对路径(例如,“d:\ archives”或“\ archives \ public”)。   如果 path2 path3 也是绝对路径,则合并操作会丢弃所有   以前组合路径并重置到该绝对路径。

这应该暗示这个问题。