Переименование папок с использованием RegEx - PullRequest
0 голосов
/ 14 июля 2010

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Это ВОПРОС КОДА, а НЕ УПРАВЛЕНИЕ СИСТЕМОЙ.Мне было интересно, как, если кто-нибудь знает, как переименовать имена папок с помощью RegEx?По сути, мне нужно избавиться от ~ ”#% & *: <>?/ \ {|} в любых именах папок.Мне было интересно, как это сделать, так как я думаю, что мне нужно начать с «снизу вверх» (имеется в виду последняя возможная папка развертки и начать переименовывать папки с самого низкого уровня до самого высокого).

У кого-нибудь есть идеи?

Итак, у меня есть следующий код:

 public partial class CleanPathResults : Form
{
    public CleanPathResults()
    {
        InitializeComponent();
    }

    public void Sanitizer(List<string> dirtyPaths)
    {
        string regPattern = (@"[~#&!%+{}]+");
        string replacement = " ";

        Regex regExPattern = new Regex(regPattern);
        Regex regExPattern2 = new Regex(@"\s{2,}");

        StreamWriter errors = new StreamWriter(@"S:\test\Errors.txt", true);


        var dirCount = new Dictionary<string, int>();


        dataGridView1.Rows.Clear();

           try
            {

              foreach (string invalidPaths in dirtyPaths)
              {
                string sanitizedPath = regExPattern.Replace(invalidPaths, replacement);
                  sanitizedPath = regExPattern2.Replace(sanitizedPath, replacement);


                        DataGridViewRow clean = new DataGridViewRow();
                        clean.CreateCells(dataGridView1);
                        clean.Cells[0].Value = invalidPaths;
                        clean.Cells[1].Value = sanitizedPath;

                        dataGridView1.Rows.Add(clean);
                        System.IO.Directory.Move(invalidPaths, sanitizedPath);  




               }
               }

           catch (Exception e)
           {
               throw;
               //errors.Write(e);


           }


    }

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

Мой вопрос: как развернуть диск, перейти в папку LOWEST в древовидной структуре, переименовать папки вверх?Возьмите, например, путь: G: \ Test ~ \ Это всего лишь% a Test \ test & test \ testing !! \ ## test.txt

Как я мог бы переименовать это и начать с тестирования!!папку и работать так, чтобы я не получил никаких ошибок?

Ответы [ 3 ]

0 голосов
/ 14 июля 2010

Вам необходим обратный поиск в ширину для перебора каталогов.

0 голосов
/ 14 июля 2010

Ваш код, кажется, делает слишком много.Вот фрагмент кода, который просто очищает имена каталогов.

static void SanitizeFolders(DirectoryInfo root)
{
    string regPattern = (@"[~#&!%+{}]+");
    string cleanName = "";
    Regex regExPattern = new Regex(regPattern);

    foreach (DirectoryInfo sub in root.GetDirectories())
    {
        if (regExPattern.IsMatch(sub.Name))
        {
            /* set cleanName appropriately... */

            sub.MoveTo(cleanName);
        }
    }

    //recurse into subdirectories
    foreach (DirectoryInfo sub in root.GetDirectories())
    {
        SanitizeFolders(sub);
    }
}
0 голосов
/ 14 июля 2010

Вы хотите DirectoryInfo Имя свойство.Если у вас есть каталог и новое имя, вы можете использовать функцию Directory.Move для его переименования.

Если вы хотите перейти в подкаталоги каталога, вы можете использовать DirectoryInfo.GetDirectories метод родительского каталога до тех пор, пока он не вернет пустой или пустой массив.Самый простой способ сделать это - с помощью рекурсии.

Эта функция позволит вам выполнить детализацию, и вы начнете ее с родительского каталога:переименуйте папку.

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