3

ファイルやフォルダの名前を小文字に変更するプログラムがあります。私はこのコードを書きました:

    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);
                }
            }
        }
    }

しかし、次の例外が発生します。

「送信元パスと宛先パスは異なっている必要があります。」

この問題を解決するにはどうすればよいですか?

4

4 に答える 4

6

Windowsでは大文字と小文字が区別されないため、ファイル名に関する限り、ファイルの名前を一時的な名前に変更してから、小文字に名前を戻す必要があります。

于 2011-11-16T13:54:39.090 に答える
2

Windowsファイルシステムは名前を大文字と小文字を区別して保存しますが、名前の比較では大文字と小文字を区別しないように動作するため、名前の変更操作は機能しません...

本当に必要な場合/実行したい場合は、最初にファイル/ディレクトリの名前を一時的に別の一意の名前に変更してから、名前を「元に戻す」で目的の「小文字の名前」に変更する必要があります。

参考のために、http ://msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspxおよびhttp://support.microsoft.com/kb/100108/en-usを参照してください。

NTFSで大文字と小文字を区別する必要がある場合は、dwordを0に設定できますObCaseInsensitiveHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\推奨されません!)。

NFSを扱っている場合は、http://technet.microsoft.com/en-us/library/cc783185%28WS.10%29.aspxを参照してください。

于 2011-11-16T13:55:32.213 に答える
1

これは機能します:

File.Move(destinationFilePath, destinationFilePath);
于 2020-04-28T02:53:02.563 に答える
0

残念ながら、これはWindowsの問題であり、Odedがコメントで言及しているように、大文字と小文字は区別されません。あなたがしなければならないことは、フォルダの名前を2回変更することです。フォルダを新しい一時的な名前に移動してから、元の名前の小文字に戻します。

于 2011-11-16T13:56:02.740 に答える