private IEnumerable <string> EnumerateEntriesInDirectory([NotNull] DirectoryEntry directory, [NotNull] PathPattern pattern, [NotNull] AbsolutePath directoryPath, SearchOption searchOption, EnumerationFilter filter) { PathPattern subPattern = pattern.SubPattern; if (subPattern == null) { Container.ChangeTracker.NotifyContentsAccessed(directory.PathFormatter, FileAccessKinds.Read); foreach (BaseEntry entry in directory.EnumerateEntries(filter).Where(x => pattern.IsMatch(x.Name)) .OrderBy(x => x.Name)) { string basePath = directoryPath.GetText(); yield return(Path.Combine(basePath, entry.Name)); } if (searchOption == SearchOption.AllDirectories) { foreach (DirectoryEntry subdirectory in directory.Directories) { AbsolutePath subdirectoryPath = directoryPath.Append(subdirectory.Name); foreach (string nextPath in EnumerateEntriesInDirectory(subdirectory, pattern, subdirectoryPath, searchOption, filter)) { yield return(nextPath); } } } } else { foreach (DirectoryEntry subdirectory in directory.Directories) { if (pattern.IsMatch(subdirectory.Name)) { AbsolutePath subdirectoryPath = directoryPath.Append(subdirectory.Name); foreach (string nextPath in EnumerateEntriesInDirectory(subdirectory, subPattern, subdirectoryPath, searchOption, filter)) { yield return(nextPath); } } } } }
private static void AssertIsNotReadOnly([NotNull] DirectoryEntry directory, [NotNull] AbsolutePath directoryPath) { if (directory.Attributes.HasFlag(FileAttributes.ReadOnly)) { throw ErrorFactory.System.AccessDenied(directoryPath.GetText()); } foreach (FileEntry file in directory.Files.Values) { AssertFileIsNotReadOnly(file); } foreach (DirectoryEntry subdirectory in directory.Directories.Values) { AbsolutePath subdirectoryPath = directoryPath.Append(subdirectory.Name); AssertIsNotReadOnly(subdirectory, subdirectoryPath); } }
private static AbsolutePath GetTempFilePath([NotNull] FileEntry file) { AbsolutePath directoryPath = file.Parent.PathFormatter.GetPath(); return(directoryPath.Append("EFS0.TMP")); }