Изменение имен файлов с помощью RegEx и рекурсии - PullRequest
1 голос
/ 10 июня 2010

Я пытаюсь переименовать файлы, которые в моей программе указаны как «недопустимые символы» для импорта файлов SharePoint.Недопустимые символы, на которые я ссылаюсь: ~ #% & * {} / \ |: <>?- ""

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

Кто-нибудь знает, как это сделать?Пока у меня есть это: (пожалуйста, помните, я полный n00b к этому материалу)

class Program
{
    static void Main(string[] args)
    {
        string[] files = Directory.GetFiles(@"C:\Documents and Settings\bob.smith\Desktop\~Test Folder for [SharePoint] %testing", "*.*", SearchOption.AllDirectories);
        foreach (string file in files)
        {
            Console.Write(file + "\r\n");


        }
        Console.WriteLine("Press any key to continue...");
        Console.ReadKey(true);



        string pattern = " *[\\~#%&*{}/:<>?|\"-]+ *";
        string replacement = " ";
        Regex regEx = new Regex(pattern);

        string[] fileDrive = Directory.GetFiles(@"C:\Documents and Settings\bob.smith\Desktop\~Test Folder for [SharePoint] %testing", "*.*", SearchOption.AllDirectories);
        StreamWriter sw = new StreamWriter(@"C:\Documents and Settings\bob.smith\Desktop\~Test Folder for [SharePoint] %testing\File_Renames.txt");
        foreach(string fileNames in fileDrive)
        {

        string sanitized = regEx.Replace(fileNames, replacement);
        sw.Write(sanitized + "\r\n");
        }
        sw.Close();



    }






}

Так что мне нужно выяснить, как рекурсивно искать эти недействительные символы, заменить их всобственно имя файла.У кого-нибудь есть идеи?

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Когда вы рекурсивно работаете с файлами и каталогами, во многих случаях проще использовать класс DirectoryInfo и его члены вместо статических методов.Для вас существует предварительно построенная древовидная структура, поэтому вам не нужно управлять этим самостоятельно.

GetDirectories возвращает больше экземпляров DirectoryInfo, чтобы вы могли обходить дерево, тогда как GetFiles возвращает FileInfo объектов.

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

1 голос
/ 10 июня 2010

File.Move () эффективно переименовывает файлы.По сути, вам просто нужно

File.Move(fileNames, sanitized);

внутри последнего цикла.

ALERT - возможно, будут повторяющиеся имена файлов, поэтомуустановить политику, чтобы избежать этого, например, добавив счетчик в конце переменной sanitized.Кроме того, примените правильную обработку исключений.

PS: Конечно, вам не нужно искать такие символы, как :\*.

...