internal static FilesystemEntry TryFindFilesystemEntryInDirectory(DirectoryEntryBase parentDirectory, string childName) { if (parentDirectory == null) { throw new ArgumentNullException(nameof(parentDirectory)); } if (String.IsNullOrEmpty(childName)) { throw new ArgumentException(); } return(parentDirectory .EnumerateChildFilesystemEntries() .FirstOrDefault(entry => FilesystemEntryNamesEquals(entry.Name, childName))); }
/// <summary> /// Finds filesystem entry representing given path. If no such entry exists, returns null. /// </summary> internal static FilesystemEntry TryFindFilesystemEntry(string path, DirectoryEntryBase rootDirectory) { var pathNames = SplitPath(path); var currentDirectory = rootDirectory; FileEntryBase file = null; foreach (var pathName in pathNames) { if (currentDirectory == null) { return(null); } if (file != null) { //File cannot contain children return(null); } var childEntry = TryFindFilesystemEntryInDirectory(currentDirectory, pathName); if (childEntry is DirectoryEntryBase childDirectory) { currentDirectory = childDirectory; } else if (childEntry is FileEntryBase f) { file = f; } else { return(null); } } if (file != null) { return(file); } else { return(currentDirectory); } }