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);
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        private static AbsolutePath GetTempFilePath([NotNull] FileEntry file)
        {
            AbsolutePath directoryPath = file.Parent.PathFormatter.GetPath();

            return(directoryPath.Append("EFS0.TMP"));
        }