文件或文件夹命名为小写在使用的DirectoryInfo / FileInfo.MoveTo C#(

2019-10-29 19:01发布

我有一个重命名文件或文件夹小写名字的程序。

我写了这个代码:

    private void Replace(string FolderLocation, string lastText, string NewText)
    {
        if (lastText == "")
        {
            lastText = " ";
        }
        if (NewText == "")
        {
            NewText = " ";
        }

        DirectoryInfo i = new DirectoryInfo(FolderLocation);
        string NewName = "";
        if (checkBox2.Checked)
        {
            if (i.Parent.FullName[i.Parent.FullName.Length - 1].ToString() != "\\") //For parents like E:/
            {
                NewName = i.Parent.FullName + "\\" + i.Name.Replace(lastText, NewText);
            }
            else
            {
                NewName = i.Parent.FullName + i.Name.Replace(lastText, NewText);
            }

                NewName = NewName.ToLower();


            if (NewName != i.FullName)
            {
                 i.MoveTo(NewName);
            }
            foreach (DirectoryInfo sd in i.GetDirectories())
            {
                Replace(sd.FullName, lastText, NewText);
            }
        }
        if (checkBox1.Checked)
        {
            foreach (FileInfo fi in i.GetFiles())
            {
                NewName = fi.Directory + "\\" + fi.Name.Replace(lastText, NewText);

                    NewName = NewName.ToLower();

                if (NewName != fi.FullName)
                {
                    fi.MoveTo(NewName);
                }
            }
        }
    }

但我得到一个异常:

“源和目标路径必须是不同的。”

我怎样才能解决这个问题呢?

Answer 1:

由于Windows不区分大小写,只要文件名而言,你需要将文件重命名为一个临时名称然后重命名回来小写字符。



Answer 2:

尽管Windows文件系统存储名称的情况下,senstivie他们的行为不区分大小写的名称比较这样的重命名操作将无法正常工作...

如果你真的需要/想这样做,你需要先暂时重命名文件/目录到不同的东西和独特的,然后重新命名为“回”到“小写的名字”你想要的。

更多信息参见http://msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspx和http://support.microsoft.com/kb/100108/en-us 。

如果你需要NTFS是区分大小写的,你可以将DWORD设置ObCaseInsensitiveHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ 0(不推荐!)。

如果你正在处理与NFS然后看到http://technet.microsoft.com/en-us/library/cc783185%28WS.10%29.aspx 。



Answer 3:

不幸的是,这是一个窗口问题,因为它是俄德在评论中提到不区分大小写。 你必须做的是将文件夹重命名两次。 通过将文件夹移动到一个新的临时名称,然后回到原来的名称的小写。



文章来源: File or Folder rename to lower case In C# using DirectoryInfo/FileInfo.MoveTo()