I have a program that renames files or folders to lower case names. I have written this code:
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);
}
}
}
}
But I get the following exception:
"Source and destination path must be different."
How can I solve this issue?
由于 Windows 不区分大小写,就文件名而言,您需要将文件重命名为临时名称,然后用小写字符重命名。
Although Windows Filesystems store names case-senstivie they behave case-insensitive on name comparison thus your renaming operation won't work...
IF you really need/want to do that you will need to first rename temporarily the file/directory to something different and unique, then rename it "back" to the "lower case name" you want.
For reference see http://msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspx and http://support.microsoft.com/kb/100108/en-us .
IF you need NTFS to be case-sensitive you can set the dword ObCaseInsensitive
under HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\kernel\\
to 0 (NOT RECOMMENDED!).
IF you are dealing with NFS then see http://technet.microsoft.com/en-us/library/cc783185%28WS.10%29.aspx .
这有效:
File.Move(destinationFilePath, destinationFilePath);
Unfortunately this is a windows issue as it is case insensitive as Oded mentions in the comments. What you would have to do is to rename the folder twice. By moving the folder to a new temporary name then back to the lowercase of the original name.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.