public ValidateFileName ( string fileName ) : bool | ||
fileName | string | |
return | bool |
public bool ValidateFileName(string fileName)
{
// Ambiguous matching of mask and file name.
for (var i = 1; i < _splits.Count - 1; i++)
{
if (_splits[i] == String.Empty)
throw new InvalidDataException("Ambiguous matching of mask and file name");
}
// Ambiguous matching of mask and file name.
if (
_splits.Any(
split => split != String.Empty && CountSplitsInMask(split) < CountSplitsInFileName(split, fileName)))
{
throw new InvalidDataException("Ambiguous matching of mask and file name");
}
// Validation with regex
var regexPattern = new StringBuilder();
for (var i = 0; i < _splits.Count; i++)
{
regexPattern.Append(ConvertForRegex(_splits[i])
+ (i != _splits.Count - 1 ? ".*" : "$"));
}
var regex = new Regex(regexPattern.ToString());
return regex.IsMatch(@fileName);
}
private void ChangeTags() { var fileName = Path.GetFileNameWithoutExtension(File.FullName); if (!_maskParser.ValidateFileName(fileName)) { throw new InvalidDataException("Mask doesn't match the file name."); } var tagPatternsInMask = _maskParser.GetTags(); var splitsInMask = _maskParser.GetSplits(); fileName = fileName.Remove(0, splitsInMask[0].Length); // Remove first split for (var i = 0; i < splitsInMask.Count - 1; i++) { var indexOfSplit = splitsInMask[i + 1] != String.Empty ? fileName.IndexOf(splitsInMask[i + 1], StringComparison.Ordinal) : fileName.Length; var tagValueInFileName = fileName.Substring(0, indexOfSplit); ChangeTag(tagPatternsInMask[i], tagValueInFileName); fileName = fileName.Remove(0, indexOfSplit + splitsInMask[i + 1].Length); } }