diff --git a/PowerKit.Tests/Extensions/DirectoryExtensionsTests.cs b/PowerKit.Tests/Extensions/DirectoryExtensionsTests.cs index afdf32c..b49bd3f 100644 --- a/PowerKit.Tests/Extensions/DirectoryExtensionsTests.cs +++ b/PowerKit.Tests/Extensions/DirectoryExtensionsTests.cs @@ -166,6 +166,21 @@ public void Copy_UnixFileMode_Test() .Be(File.GetUnixFileMode(sourceFilePath)); } + [Fact] + public void CreateForFile_Test() + { + // Arrange + using var tempDir = TempDirectory.Create(); + var filePath = Path.Combine(tempDir.Path, "sub", "nested", "file.txt"); + + // Act + Directory.CreateForFile(filePath); + + // Assert + Directory.Exists(Path.Combine(tempDir.Path, "sub", "nested")).Should().BeTrue(); + File.Exists(filePath).Should().BeFalse(); + } + [Fact] public void Reset_Test() { diff --git a/PowerKit/Extensions/DirectoryExtensions.cs b/PowerKit/Extensions/DirectoryExtensions.cs index 2b8b531..cea8b45 100644 --- a/PowerKit/Extensions/DirectoryExtensions.cs +++ b/PowerKit/Extensions/DirectoryExtensions.cs @@ -124,6 +124,17 @@ var sourceFilePath in Directory.GetFiles( } } + /// + /// Creates the directory for the specified file path, including all intermediate directories. + /// Does nothing if the directory already exists or if the path has no directory component. + /// + public static void CreateForFile(string filePath) + { + var dirPath = Path.GetDirectoryName(filePath); + if (!string.IsNullOrEmpty(dirPath)) + Directory.CreateDirectory(dirPath); + } + /// /// Deletes the directory and all its contents, then recreates it as an empty directory. ///