Изменение использования FileNames RegEx и Рекурсия

Я пытаюсь переименовать файлы что мои списки программ как имеющий "запрещенные символы" для импорта файла 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();



    }






}

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

1
задан yeahumok 10 June 2010 в 15:40
поделиться

2 ответа

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

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

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

1
ответ дан 2 September 2019 в 23:51
поделиться

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

File.Move(fileNames, sanitized);

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

ПРЕДУПРЕЖДЕНИЕ - возможно, будут повторяющиеся имена файлов, поэтому вам придется установить политику, чтобы избежать этого, например, добавление счетчика в конце переменной sanitized . Кроме того, примените правильную обработку исключений.

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

1
ответ дан 2 September 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: