Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Combine()返回意外的结果_C#_Path - Fatal编程技术网

C# Combine()返回意外的结果

C# Combine()返回意外的结果,c#,path,C#,Path,我正在尝试使用path.Combine创建路径,但得到意外结果 using System; using System.IO; namespace PathCombine_Delete { class Program { static void Main(string[] args) { string destination = "D:\\Directory"; string destination0

我正在尝试使用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

我不明白为什么?我承认现在已经很晚了,但是我已经使用过很多次了,从.NET4.0开始,它允许传递字符串param。但是,它似乎忽略了前2个,而只读取了最后一个。

这里是错误

 string replacedDetails = path.Replace(sourcefolder + "\\" , "");
您正在添加另一个反斜杠,但未找到要替换的内容。 删除添加的反斜杠将提供要搜索和替换的正确字符串

 string replacedDetails = path.Replace(sourcefolder , "");
但是,您可以避免所有的替换内容和中间变量的操作

 string result = Path.Combine(destination, destination02, Path.GetFileName(path));
这里是错误

 string replacedDetails = path.Replace(sourcefolder + "\\" , "");
您正在添加另一个反斜杠,但未找到要替换的内容。 删除添加的反斜杠将提供要搜索和替换的正确字符串

 string replacedDetails = path.Replace(sourcefolder , "");
但是,您可以避免所有的替换内容和中间变量的操作

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

我建议使用:

  string replacedDetails = Path.GetFileName(path);

这将处理在不使用字符串替换的情况下从路径中删除源文件夹的问题,如果您最终从其他地方获取路径,则不一定可靠。

我建议使用:

  string replacedDetails = Path.GetFileName(path);
这将处理在不使用字符串替换的情况下从路径中删除源文件夹的问题,如果您最终从其他地方获取路径,那么字符串替换就不一定可靠。

是吗?您是否验证了要传递给Path.Combine的内容?我引述他的话:

路径1应该是绝对路径,例如d:\archives或\archives\public。 如果路径2或路径3也是绝对路径,则合并操作将丢弃所有路径 以前组合的路径并重置为该绝对路径

这应该暗示了问题所在。

你知道吗?您是否验证了要传递给Path.Combine的内容?我引述他的话:

路径1应该是绝对路径,例如d:\archives或\archives\public。 如果路径2或路径3也是绝对路径,则合并操作将丢弃所有路径 以前组合的路径并重置为该绝对路径


这应该暗示了问题所在。

它可能只使用最后一个可用的根节点。你能解释一下(最好给出一些输入和输出示例)这段代码应该做什么吗?它可能只使用最后一个可用的根节点。你能解释一下(最好给出一些输入和输出示例)这段代码应该做什么吗,你说得对,但我还是不明白。我在字符串result=Path.Combinedestination,destination02,replacedDetails中添加了一个watch;将鼠标悬停在每个变量名称上,每个名称都与预期的一样。我不明白为什么路径没有合并反斜杠的表示有误导性好吧,你是对的,但我还是不明白。我在字符串result=Path.Combinedestination,destination02,replacedDetails中添加了一个watch;将鼠标悬停在每个变量名称上,每个名称都与预期的一样。我不明白为什么路径没有组合反斜杠的表示有误导性是的,我确实读过,我甚至在我的帖子中链接了它,但这没有被吸收。。。然而,我认为由于字符串替换函数,我没有传递绝对路径。我正在传递L:\\MyFile.pdf.ReplaceL:\\,这使得MyFile.pdf。我现在明白了,所以谢谢你是的,我确实读过,我甚至在我的帖子中链接到了它,但这并没有被吸收。。。然而,我认为由于字符串替换函数,我没有传递绝对路径。我正在传递L:\\MyFile.pdf.ReplaceL:\\,这使得MyFile.pdf。我现在明白了,谢谢你