From 905c0ceb131c0a9ecd22d9d288da4392b4c6d9c6 Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Wed, 20 Aug 2025 11:53:46 +0200 Subject: [PATCH] Add extension methods for validating subdirectory relationships - Implement `IsSubPathOf` for `IFileInfo` and `IDirectoryInfo` to check if a directory or file is a subpath of a given parent directory. This in preparation of refactoring. --- .../Extensions/IFileInfoExtensions.cs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs b/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs index 2a80ef6cf..6f61670a5 100644 --- a/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs +++ b/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs @@ -18,4 +18,28 @@ public static string ReadToEnd(this IFileInfo fileInfo) using var reader = new StreamReader(stream); return reader.ReadToEnd(); } + + /// Validates is in a subdirectory of + public static bool IsSubPathOf(this IFileInfo file, IDirectoryInfo parentDirectory) + { + var parent = file.Directory; + return parent is not null && parent.IsSubPathOf(parentDirectory); + } +} + +public static class IDirectoryInfoExtensions +{ + /// Validates is subdirectory of + public static bool IsSubPathOf(this IDirectoryInfo directory, IDirectoryInfo parentDirectory) + { + var parent = directory; + do + { + if (parent.FullName == parentDirectory.FullName) + return true; + parent = parent.Parent; + } while (parent != null); + + return false; + } }