Есть ли функция стандартизации имен файлов в папке?
Я разрабатываю программу на С#, которая должна проверять правильность написания файлов, а затем переместить их в другую папку.
Например, я обычно получаю такой файл 082018 - Name - Reason.txt, однако некоторые люди забывают помещать интервал или инвертировать значения, мне нужно проверить имена и поместить их в шаблон выше.
Я думаю, что использование 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
предполагает:
.txt
.Name
и Reason
имеют длину не менее 1 символа. Кроме того, в случае успешного Match
, хотя я конвертирую значение в DateTime
я не делаю никаких дополнительных проверок, чтобы увидеть, является ли он в этом формате. Например, если дата установлена в формате yyMMdd
Regex
прежнему будет проходить, но может не соответствовать формату (при условии, что формат, который вы используете, - MMddyy
).
Таким образом, это действительно только отправная точка, но вы можете изменить свое Regex
и проверки на основе ваших потребностей/ограничений.