我正在尝试使用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以来它允许传递字符串参数。但是,它似乎忽略了前两个,只读了最后一个。
答案 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 也是绝对路径,则合并操作会丢弃所有 以前组合路径并重置到该绝对路径。
这应该暗示这个问题。