Ответ 1
Так как Windows нечувствительна к регистру, то в отношении имен файлов вам нужно будет переименовать файл во временное имя, а затем переименовать его с помощью строчных символов.
У меня есть программа, которая переименовывает файлы или папки для более низких имен.
Я написал этот код:
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 хранят имена case-senstivie, они ведут себя без учета регистра при сопоставлении имен, поэтому ваша операция переименования не будет работать...
ЕСЛИ вам действительно нужно/нужно сделать это, вам нужно будет сначала переименовать файл/каталог на что-то другое и уникальное, а затем переименуйте его "назад" в "нижнее имя", которое вы хотите.
Для справки см. http://msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspx и http://support.microsoft.com/kb/100108/en-us.
ЕСЛИ вам нужно, чтобы NTFS учитывала регистр, вы можете установить dword ObCaseInsensitive
под HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\
равным 0 (НЕ РЕКОМЕНДУЕТСЯ!).
ЕСЛИ вы имеете дело с NFS, см. http://technet.microsoft.com/en-us/library/cc783185%28WS.10%29.aspx.
К сожалению, это проблема с окнами, так как она нечувствительна к регистру, как упоминает Одед в комментариях. Вам нужно будет переименовать папку дважды. Переместив папку в новое временное имя, вернитесь к нижнему регистру исходного имени.