Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 使用DirectoryInfo/FileInfo.MoveTo()将文件或文件夹重命名为小写_C#_.net_File Rename_Fileinfo_Directoryinfo - Fatal编程技术网

C# 使用DirectoryInfo/FileInfo.MoveTo()将文件或文件夹重命名为小写

C# 使用DirectoryInfo/FileInfo.MoveTo()将文件或文件夹重命名为小写,c#,.net,file-rename,fileinfo,directoryinfo,C#,.net,File Rename,Fileinfo,Directoryinfo,我有一个程序,将文件或文件夹重命名为小写名称。我编写了以下代码: private void Replace(string FolderLocation, string lastText, string NewText) { if (lastText == "") { lastText = " "; } if (NewText == "") { NewTe

我有一个程序,将文件或文件夹重命名为小写名称。我编写了以下代码:

    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);
                }
            }
        }
    }
但我有以下例外:

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


如何解决此问题?

由于Windows对文件名不区分大小写,您需要将文件重命名为临时名称,然后用小写字符重新命名。

尽管Windows文件系统存储名称大小写敏感,但它们在名称比较时不区分大小写,因此重命名操作无法工作

如果您真的需要/想要这样做,您需要首先将文件/目录临时重命名为不同且唯一的名称,然后将其“back”重命名为所需的“小写名称”

有关参考信息,请参阅和

如果需要NTFS区分大小写,可以将
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\
下的dword
设置为0(不推荐!)


如果您正在处理NFS,请参阅。

不幸的是,这是一个windows问题,因为它不区分大小写,正如Oded在评论中提到的那样。您需要做的是重命名文件夹两次。将文件夹移动到一个新的临时名称,然后返回到原始名称的小写字母。

此操作:

File.Move(destinationFilePath,destinationFilePath);

Windows对文件名不区分大小写。好的。但它如何显示文件名?它使用保存的内容。但在比较文件名时,就其而言,“FILENAME”==“FILENAME”==“FILENAME”
。我认为Windows操作系统不允许在同一文件夹中包含给定的文件,例如“test.txt”和“test.txt”。这就是为什么你的geht是个例外。MoveTo将文件复制到新位置并删除旧位置。请尝试FileSystem.Rename()@PilgerstorferFranz,尽管在标准情况下您是对的Windows/NTFS实际上可以配置为允许这样做。现在我得到了“拒绝访问”选项。但我以管理员身份运行它。发生了什么事???@ahmadalishafie-“拒绝访问”总是意味着缺乏权限。确保执行应用程序的用户(可能是您的用户)可以访问该路径。这意味着无法访问程序的文件/文件夹。但我想发布我的程序。如何修复此错误?很可能目录正在使用中。这可以是一个简单的Windows资源管理器实例。使用DirectoryInfo的目录操作对此非常敏感。这不是Windows问题,而是.Net问题。Win32的MoveFileEx只支持大小写重命名。Net搞错了这个。