diff --git a/Directory.Build.props b/Directory.Build.props
index 8895d1c58..a02382776 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -14,6 +14,7 @@
$(DefineConstants);FEATURE_ASYNC_FILE;FEATURE_ENUMERATION_OPTIONS;FEATURE_ADVANCED_PATH_OPERATIONS;FEATURE_PATH_JOIN_WITH_SPAN;FEATURE_SPAN
$(DefineConstants);FEATURE_FILE_MOVE_WITH_OVERWRITE;FEATURE_SUPPORTED_OS_ATTRIBUTE;FEATURE_FILE_SYSTEM_WATCHER_FILTERS;FEATURE_ENDS_IN_DIRECTORY_SEPARATOR;FEATURE_PATH_JOIN_WITH_PARAMS;FEATURE_PATH_JOIN_WITH_FOUR_PATHS;FEATURE_FILE_SYSTEM_INFO_LINK_TARGET;FEATURE_CREATE_SYMBOLIC_LINK;FEATURE_FILESTREAM_OPTIONS
$(DefineConstants);FEATURE_PATH_EXISTS;FEATURE_FILE_SYSTEM_WATCHER_WAIT_WITH_TIMESPAN;FEATURE_FILE_ATTRIBUTES_VIA_HANDLE;FEATURE_CREATE_TEMP_SUBDIRECTORY;FEATURE_READ_LINES_ASYNC;FEATURE_UNIX_FILE_MODE
+ $(DefineConstants);FEATURE_PATH_SPAN
$(DefineConstants);FEATURE_SERIALIZABLE
diff --git a/src/TestableIO.System.IO.Abstractions.Wrappers/PathBase.cs b/src/TestableIO.System.IO.Abstractions.Wrappers/PathBase.cs
index 0540b8f49..e460df76a 100644
--- a/src/TestableIO.System.IO.Abstractions.Wrappers/PathBase.cs
+++ b/src/TestableIO.System.IO.Abstractions.Wrappers/PathBase.cs
@@ -43,6 +43,11 @@ internal PathBase() { }
///
public abstract string Combine(params string[] paths);
+
+#if FEATURE_PATH_SPAN
+ ///
+ public abstract string Combine(params ReadOnlySpan paths);
+#endif
///
public abstract string Combine(string path1, string path2);
@@ -117,6 +122,11 @@ internal PathBase() { }
///
public abstract string Join(ReadOnlySpan path1, ReadOnlySpan path2, ReadOnlySpan path3);
+#if FEATURE_PATH_SPAN
+ ///
+ public abstract string Join(params ReadOnlySpan paths);
+#endif
+
///
public abstract bool TryJoin(ReadOnlySpan path1, ReadOnlySpan path2, ReadOnlySpan path3, Span destination, out int charsWritten);
diff --git a/src/TestableIO.System.IO.Abstractions.Wrappers/PathWrapper.cs b/src/TestableIO.System.IO.Abstractions.Wrappers/PathWrapper.cs
index 2b4972e35..230fe6624 100644
--- a/src/TestableIO.System.IO.Abstractions.Wrappers/PathWrapper.cs
+++ b/src/TestableIO.System.IO.Abstractions.Wrappers/PathWrapper.cs
@@ -56,6 +56,14 @@ public override string Combine(params string[] paths)
return Path.Combine(paths);
}
+#if FEATURE_PATH_SPAN
+ ///
+ public override string Combine(params ReadOnlySpan paths)
+ {
+ return Path.Combine(paths);
+ }
+#endif
+
///
public override string Combine(string path1, string path2)
{
@@ -185,6 +193,14 @@ public override string Join(ReadOnlySpan path1, ReadOnlySpan path2)
public override string Join(ReadOnlySpan path1, ReadOnlySpan path2, ReadOnlySpan path3) =>
Path.Join(path1, path2, path3);
+#if FEATURE_PATH_SPAN
+ ///
+ public override string Join(params ReadOnlySpan paths)
+ {
+ return Path.Join(paths);
+ }
+#endif
+
///
public override bool TryJoin(ReadOnlySpan path1, ReadOnlySpan path2, Span destination, out int charsWritten) =>
Path.TryJoin(path1, path2, destination, out charsWritten);
diff --git a/src/TestableIO.System.IO.Abstractions/IPath.cs b/src/TestableIO.System.IO.Abstractions/IPath.cs
index f4a30a397..79334ae21 100644
--- a/src/TestableIO.System.IO.Abstractions/IPath.cs
+++ b/src/TestableIO.System.IO.Abstractions/IPath.cs
@@ -33,6 +33,11 @@ public interface IPath : IFileSystemEntity
///
string Combine(params string[] paths);
+#if FEATURE_PATH_SPAN
+ ///
+ string Combine(params ReadOnlySpan paths);
+#endif
+
#if FEATURE_ENDS_IN_DIRECTORY_SEPARATOR
///
bool EndsInDirectorySeparator(ReadOnlySpan path);
@@ -148,6 +153,11 @@ string Join(ReadOnlySpan path1,
ReadOnlySpan path2,
ReadOnlySpan path3);
+#if FEATURE_PATH_SPAN
+ ///
+ string Join(params ReadOnlySpan paths);
+#endif
+
///
bool TryJoin(ReadOnlySpan path1,
ReadOnlySpan path2,
diff --git a/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/__snapshots__/ApiParityTests.Path_.NET 9.0.snap b/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/__snapshots__/ApiParityTests.Path_.NET 9.0.snap
index 533d46127..d83d023ac 100644
--- a/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/__snapshots__/ApiParityTests.Path_.NET 9.0.snap
+++ b/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/__snapshots__/ApiParityTests.Path_.NET 9.0.snap
@@ -6,8 +6,5 @@
"Char get_VolumeSeparatorChar()",
"Char[] get_InvalidPathChars()"
],
- "MissingMembers": [
- "System.String Combine(System.ReadOnlySpan`1[System.String])",
- "System.String Join(System.ReadOnlySpan`1[System.String])"
- ]
+ "MissingMembers": []
}