Переименование файла или папки в нижний регистр В C # с использованием DirectoryInfo / FileInfo.MoveTo () - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть программа, которая переименовывает файлы или папки в строчные буквы.

Я написал этот код:

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

но я получаю исключение:

«Исходный и целевой путь должны быть разными.»

как я могу решить эту проблему?

Ответы [ 3 ]

4 голосов
/ 16 ноября 2011

Поскольку Windows не учитывает регистр, что касается имен файлов, вам необходимо переименовать файл во временное имя, а затем переименовать обратно строчными символами.

2 голосов
/ 16 ноября 2011

Хотя файловые системы Windows хранят имена с учетом регистра, они ведут себя без учета регистра при сравнении имен, поэтому операция переименования не будет работать ...

ЕСЛИ вам действительно нужно / вы хотите сделать то, что вам нужно сначалавременно переименуйте файл / каталог во что-то другое и уникальное, затем переименуйте его «обратно» в «строчное имя», которое вы хотите.

Для справки см. 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.

0 голосов
/ 16 ноября 2011

К сожалению, это проблема окон, так как она не учитывает регистр, как упоминает Одед в комментариях.Что вам нужно сделать, это переименовать папку дважды.Переместив папку на новое временное имя, затем верните его в нижний регистр исходного имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...