Стандартизация имен файлов в папке

2

Есть ли функция стандартизации имен файлов в папке?

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

Например, я обычно получаю такой файл 082018 - Name - Reason.txt, однако некоторые люди забывают помещать интервал или инвертировать значения, мне нужно проверить имена и поместить их в шаблон выше.

  • 1
    К сожалению, нет - вам придется добавить эту функцию в вашу программу. Вам нужно будет написать что-то, что может проверять имена файлов (например, регулярные выражения или пользовательские функции синтаксического анализа), разбивать три компонента заголовка на части и упорядочивать их с правильным интервалом и порядком.
  • 0
    Спасибо за ваш ответ! По крайней мере, у меня есть направление сейчас.
Теги:

1 ответ

3

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

Пусть объявить class для хранения данных имени файла в следующем формате.

public class FileNameFormat
{
    public string FileName { get; set; }
    public DateTime Date { get; set; }
    public string Name { get; set; }
    public string Reason { get; set; }
    public bool IsValid { get; set; }
}

Теперь подобный метод будет проверять ваше имя файла, используя предоставленное Regex.

public static FileNameFormat VerifyFileName(string fileName)
{
    var fileNameInfo = new FileNameFormat();
    fileNameInfo.FileName = fileName;

    var rgx = new Regex(@"^(\d{6}) - (.+) - (.+).txt$");
    var match = rgx.Match(fileName);
    fileNameInfo.IsValid = match.Success;
    if (DateTime.TryParseExact(match.Groups[1].Value, "MMddyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out DateTime result))
    {
        fileNameInfo.Date = result;
    }
    fileNameInfo.Name = match.Groups[2].Value;
    fileNameInfo.Reason = match.Groups[3].Value;

    return fileNameInfo;
}

Regex предполагает:

  • Дата в имени вашего файла имеет длину 6 и все численные значения.
  • Все имена файлов имеют расширение .txt.
  • Секции Name и Reason имеют длину не менее 1 символа.

Кроме того, в случае успешного Match, хотя я конвертирую значение в DateTime я не делаю никаких дополнительных проверок, чтобы увидеть, является ли он в этом формате. Например, если дата установлена в формате yyMMdd Regex прежнему будет проходить, но может не соответствовать формату (при условии, что формат, который вы используете, - MMddyy).

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

  • 0
    Спасибо за помощь ! Я думаю, что это будет работать. Я попробую это, как только доберусь домой.
  • 0
    Сах, я новичок в разработке, и я забыл сказать, что мне нужно сделать консольное приложение, этот метод может быть использован в этом формате?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню