public override void SetAccessControl(string path, DirectorySecurity directorySecurity) { mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path"); path = path.TrimSlashes(); if (!mockFileDataAccessor.Directory.Exists(path)) { throw CommonExceptions.CouldNotFindPartOfPath(path); } var directoryData = (MockDirectoryData)mockFileDataAccessor.GetFile(path); directoryData.AccessControl = directorySecurity; }
private string[] GetFilesInternal( IEnumerable <string> files, string path, string searchPattern, SearchOption searchOption) { if (path == null) { throw new ArgumentNullException(nameof(path)); } if (path.Any(c => Path.GetInvalidPathChars().Contains(c))) { throw new ArgumentException("Invalid character(s) in path", nameof(path)); } CheckSearchPattern(searchPattern); path = path.TrimSlashes(); path = path.NormalizeSlashes(); if (!Exists(path)) { throw CommonExceptions.CouldNotFindPartOfPath(path); } path = EnsureAbsolutePath(path); if (!path.EndsWith(Path.DirectorySeparatorChar.ToString())) { path += Path.DirectorySeparatorChar; } var isUnix = XFS.IsUnixPlatform(); var allDirectoriesPattern = isUnix ? @"([^<>:""/|?*]*/)*" : @"([^<>:""/\\|?*]*\\)*"; string fileNamePattern; string pathPatternSpecial = null; if (searchPattern == "*") { fileNamePattern = isUnix ? @"[^/]*?/?" : @"[^\\]*?\\?"; } else { fileNamePattern = Regex.Escape(searchPattern) .Replace(@"\*", isUnix ? @"[^<>:""/|?*]*?" : @"[^<>:""/\\|?*]*?") .Replace(@"\?", isUnix ? @"[^<>:""/|?*]?" : @"[^<>:""/\\|?*]?"); var extension = Path.GetExtension(searchPattern); bool hasExtensionLengthOfThree = extension != null && extension.Length == 4 && !extension.Contains("*") && !extension.Contains("?"); if (hasExtensionLengthOfThree) { var fileNamePatternSpecial = string.Format(CultureInfo.InvariantCulture, "{0}[^.]", fileNamePattern); pathPatternSpecial = string.Format( CultureInfo.InvariantCulture, isUnix ? @"(?i:^{0}{1}{2}(?:/?)$)" : @"(?i:^{0}{1}{2}(?:\\?)$)", Regex.Escape(path), searchOption == SearchOption.AllDirectories ? allDirectoriesPattern : string.Empty, fileNamePatternSpecial); } } var pathPattern = string.Format( CultureInfo.InvariantCulture, isUnix ? @"(?i:^{0}{1}{2}(?:/?)$)" : @"(?i:^{0}{1}{2}(?:\\?)$)", Regex.Escape(path), searchOption == SearchOption.AllDirectories ? allDirectoriesPattern : string.Empty, fileNamePattern); return(files .Where(p => Regex.IsMatch(p, pathPattern) || (pathPatternSpecial != null && Regex.IsMatch(p, pathPatternSpecial))) .ToArray()); }