Skip to content

Commit

Permalink
Merge pull request #316 from atc-net/feature/DirectoryExtensions-Comb…
Browse files Browse the repository at this point in the history
…ineFileInfo

feat: Add CombineFileInfo to DirectoryInfoExtensions
  • Loading branch information
davidkallesen authored Apr 22, 2024
2 parents 75f967d + ce2a0c8 commit 4f1290f
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/CodeDoc/Atc/IndexExtended.md
Original file line number Diff line number Diff line change
Expand Up @@ -5355,6 +5355,7 @@

- [DirectoryInfoExtensions](System.IO.md#directoryinfoextensions)
- Static Methods
- CombineFileInfo(this DirectoryInfo directoryInfo, string[] paths)
- GetByteSize(this DirectoryInfo directoryInfo, string searchPattern = *.*, SearchOption searchOption = AllDirectories)
- GetFileInfo(this DirectoryInfo directoryInfo, string file)
- GetFilesCount(this DirectoryInfo directoryInfo, string searchPattern = *.*, SearchOption searchOption = AllDirectories)
Expand Down
12 changes: 12 additions & 0 deletions docs/CodeDoc/Atc/System.IO.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,25 @@
<br />

## DirectoryInfoExtensions
Provides extension methods for the DirectoryInfo class.

>```csharp
>public static class DirectoryInfoExtensions
>```
### Static Methods
#### CombineFileInfo
>```csharp
>FileInfo CombineFileInfo(this DirectoryInfo directoryInfo, string[] paths)
>```
><b>Summary:</b> Combines the directory path with additional sub-paths to create a FileInfo object.
>
><b>Parameters:</b><br>
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`directoryInfo`&nbsp;&nbsp;-&nbsp;&nbsp;The base directory information.<br />
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`paths`&nbsp;&nbsp;-&nbsp;&nbsp;An array of sub-paths to combine with the base directory.<br />
>
><b>Returns:</b> A FileInfo object representing the combined path.
#### GetByteSize
>```csharp
>long GetByteSize(this DirectoryInfo directoryInfo, string searchPattern = *.*, SearchOption searchOption = AllDirectories)
Expand Down
22 changes: 22 additions & 0 deletions src/Atc/Extensions/DirectoryInfoExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,30 @@
// ReSharper disable once CheckNamespace
namespace System.IO;

/// <summary>
/// Provides extension methods for the DirectoryInfo class.
/// </summary>
public static class DirectoryInfoExtensions
{
/// <summary>
/// Combines the directory path with additional sub-paths to create a FileInfo object.
/// </summary>
/// <param name="directoryInfo">The base directory information.</param>
/// <param name="paths">An array of sub-paths to combine with the base directory.</param>
/// <returns>A FileInfo object representing the combined path.</returns>
/// <exception cref="ArgumentNullException">Thrown when the directoryInfo parameter is null.</exception>
public static FileInfo CombineFileInfo(
this DirectoryInfo directoryInfo,
params string[] paths)
{
if (directoryInfo is null)
{
throw new ArgumentNullException(nameof(directoryInfo));
}

return new FileInfo(Path.Combine(new[] { directoryInfo.FullName }.Concat(paths).ToArray()));
}

/// <summary>
/// Gets the files as GetFiles, but skip files and folders with unauthorized access.
/// </summary>
Expand Down
1 change: 1 addition & 0 deletions test/Atc.Tests/CodeComplianceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public class CodeComplianceTests
typeof(StringCaseFormatter),
typeof(NumberHelper),
typeof(InternetBrowserHelper),
typeof(DirectoryInfoExtensions),
typeof(FileInfoExtensions),
typeof(HttpClientRequestResult<>),
typeof(IsoCurrencySymbolAttribute),
Expand Down
19 changes: 19 additions & 0 deletions test/Atc.Tests/Extensions/DirectoryInfoExtensionsTests.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,27 @@
// ReSharper disable StringLiteralTypo
namespace Atc.Tests.Extensions;

[Collection(nameof(Xunit.Sdk.TestCollection))]
[Trait(Traits.Category, Traits.Categories.Integration)]
[Trait(Traits.Category, Traits.Categories.SkipWhenLiveUnitTesting)]
public class DirectoryInfoExtensionsTests
{
[Theory]
[InlineData(@"C:\Projects\Extensions\ServiceCollectionExtensions.cs", @"C:\Projects", "Extensions", "ServiceCollectionExtensions.cs")]
[InlineData(@"C:\Projects\Config\appsettings.json", @"C:\Projects", "Config", "appsettings.json")]
[InlineData(@"C:\Users\User\Documents\Reports\AnnualReport.pdf", @"C:\Users\User\Documents", "Reports", "AnnualReport.pdf")]
public void CombineFileInfo(string expected, string baseDir, string subPath1, string subPath2)
{
// Arrange
var baseDirectoryInfo = new DirectoryInfo(baseDir);

// Act
var result = baseDirectoryInfo.CombineFileInfo(subPath1, subPath2);

// Assert
Assert.Equal(expected, result.FullName);
}

[Theory]
[InlineData(1, 1, 0)]
public void GetFilesForAuthorizedAccess(int expected, int numberOfTempFilesToCreate, int numberOfTempFoldersToCreate)
Expand Down

0 comments on commit 4f1290f

Please sign in to comment.