WindowsPathCharactersValidator
using Relativity.DataTransfer.Nodes.PathConversion;
using System;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
namespace Relativity.DataTransfer.Nodes.Internal.Utilities
{
internal class WindowsPathCharactersValidator : IPathCharactersValidator
{
private static readonly Regex ReservedAndInvalidWindowsFolderNamesRegex = new Regex("(\\\\|\\/)(CON|PRN|AUX|NUL|COM\\d|LPT\\d)(\\\\|\\/)", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.CultureInvariant);
private static readonly char[] InvalidPathChars = Path.GetInvalidPathChars();
public void Validate(string path)
{
ValidateNullOrEmpty(path);
if (CheckWindowsInvalidChars(path))
throw new InvalidWindowsCharacterException();
if (CheckInvalidPathCharacters(path))
throw new InvalidPathCharacterException();
}
private static void ValidateNullOrEmpty(string inputPath)
{
if (inputPath == null)
throw new ArgumentException("Path is null.");
string value = inputPath.Trim();
if (string.IsNullOrEmpty(value))
throw new ArgumentException("Path is empty.");
}
private static bool CheckWindowsInvalidChars(string path)
{
return ReservedAndInvalidWindowsFolderNamesRegex.IsMatch(path);
}
private static bool CheckInvalidPathCharacters(string path)
{
return InvalidPathChars.Any((char invalidPathChars) => path.Contains(invalidPathChars.ToString()));
}
}
}