VB.Net - Использование регулярных выражений для фильтрации имени файла - PullRequest
0 голосов
/ 08 декабря 2011

Я думаю, что я слишком усложняю что-то простое, но я ищу код VB.Net для "фильтрации" имен файлов.

Сценарий: У моей компании есть папка на сервере с более чем 65 000 файлов. Новый компьютер, который читает эти файлы, чувствителен к регистру и принимает только расширения файлов "* .S4".

Итак, мне нужно преобразовать все имена файлов в «* .S4», но я бы хотел, чтобы опция заменяла каждый файл указанным мной шаблоном.

Например:

Найти> test.s4

Заменить> test_1.S4

Использование шаблонов:

Найти> * .s4

Заменить> * _1.S4

Вот код, который у меня есть (не работает):

    'Inputs:
    Dim Filename As String = "ThisIsAnExample.s4"
    Dim Find As String = "*.s4"
    Dim Replace As String = "*.S4"

    Find = Find.Replace("*", "(.*)")
    Replace = Replace.Replace("*", "(.*)")

    Dim rgxExp As New System.Text.RegularExpressions.Regex(Find)

    MsgBox(rgxExp.Replace(Filename, Replace))

Я знаю, что это возможно, я однажды написал похожий скрипт на Javascript

Ответы [ 2 ]

0 голосов
/ 08 декабря 2011

Если вы хотите сделать это, используя c # без регулярных выражений, вы можете использовать следующее

    private void UppercaseExtension(string filepath)
    {
        //ensure the source file exists
        if (!File.Exists(filepath))
            return;

        //get the parts of the filepath
        string filename = Path.GetFileNameWithoutExtension(filepath);
        string extension = Path.GetExtension(filepath).ToUpperInvariant();
        string folderPath = Path.GetDirectoryName(filepath);
        try
        {
            //rename the file using the uppercase extension
            File.Move(filepath, Path.Combine(folderPath, filename + extension));
        }
        catch (Exception ex)
        {
            //failed to rename
        }
    }

Если вы хотите ограничить типы файлов, вы можете добавить проверку, чтобы сделать это внутри метода, или вы можете ограничить пути к файлам, передаваемым ему.

0 голосов
/ 08 декабря 2011

Не можете ли вы сделать это?

  Dim input As String = "ThisIsAnExample.s4"
  Dim pattern As String = "\.s4$"
  Dim replacement As String = ".S4"
  Dim rgx As New Regex(pattern)
  Dim result As String = rgx.Replace(input, replacement)

  Console.WriteLine("Original String: {0}", input)
  Console.WriteLine("Replacement String: {0}", result)    
...