目录Info.MoveTo-“;源路径和目标路径必须具有相同的根.移动无法跨卷进行&”;

本文关键字:移动 路径 MoveTo- Info 目标路径 目录 | 更新日期: 2023-09-27 18:27:50

我正试图弄清楚这里发生了什么。我有一个例程,它查看目录中的所有目录,并从目录名的第一部分删除任何非数字值。出于某种原因,当它执行MoveTo时,我会得到"源路径和目标路径必须具有相同的根。移动无法跨卷运行。"但我只提供了新名称作为参数。因此,目录可能是"007A-Raby",而传递到MoveTo的新名称将是"007-Raby"。有人认为我做错了什么吗?

    private void RenameSubs(string directory)
    {
        try
        {
            if (Directory.Exists(directory))
            {
                var parentDI = new DirectoryInfo(directory);
                foreach (var di in parentDI.GetDirectories())
                {
                    var spaceLocation = di.Name.IndexOf(' ');
                    var changed = false;
                    if (spaceLocation > 0)
                    {
                        var oldName = di.Name;
                        var subPartA = di.Name.Substring(0, spaceLocation);
                        var subPartB = di.Name.Substring(spaceLocation, di.Name.Length - spaceLocation);
                        for (int i = subPartA.Length - 1; i > 0; i--)
                        {
                            if (subPartA[i] < '0' || subPartA[i] > '9')
                            {
                                subPartA = subPartA.Substring(0, i);
                                changed = true;
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (changed)
                        {
                            if (!Directory.Exists(Path.Combine(directory, subPartA + subPartB)))
                            {
                                var newName = subPartA + subPartB;
                                di.MoveTo(newName);
                                txtOutput.Text += "Renamed " + oldName + " to " + di.Name + "'r'n";
                            }
                            else
                            {
                                txtOutput.Text += "Error " + oldName + " already exists " + "'r'n";
                            }
                        }
                        else
                        {
                            txtOutput.Text += "Ignored " + di.Name + "'r'n";
                        }
                    }
                }
            }   
        }
        catch (System.Exception excpt)
        {
            txtOutput.Text += "Error " + excpt.Message + "'r'n";
            Console.WriteLine(excpt.Message);
        }
    }

目录Info.MoveTo-“;源路径和目标路径必须具有相同的根.移动无法跨卷进行&”;

好的,经过反复尝试,我找到了如何修复它。当一个"相对路径"被传递到DirectoryInfo.MoveTo时,它不使用父路径,而是使用应用程序路径。因此,当我说它工作是因为它和我错过的应用程序在同一个驱动器上时,它将文件夹重命名为应用程序文件夹。为了解决这个问题,我需要传入一个到MoveTo方法的绝对路径。以下是"if(changed)"代码块内部需要的代码更改,以实现此功能:

    var newName = Path.Combine(directory, subPartA + subPartB);
    if (!Directory.Exists(newName))
    {
        di.MoveTo(newName);
        txtOutput.Text += "Renamed " + oldName + " to " + di.Name + "'r'n";
    }
    else
    {
        txtOutput.Text += "Error " + oldName + " already exists " + "'r'n";
    }

希望这能帮助其他人。