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.
///