Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<DefineConstants Condition="'$(TargetFramework)' != 'net461'">$(DefineConstants);FEATURE_FILE_SYSTEM_ACL_EXTENSIONS</DefineConstants>
<DefineConstants Condition="'$(TargetFramework)' == 'net6.0' OR '$(TargetFramework)' == 'net5.0' OR '$(TargetFramework)' == 'netcoreapp3.1' OR '$(TargetFramework)' == 'netstandard2.1'">$(DefineConstants);FEATURE_ASYNC_FILE;FEATURE_ENUMERATION_OPTIONS;FEATURE_ADVANCED_PATH_OPERATIONS;FEATURE_PATH_JOIN_WITH_SPAN</DefineConstants>
<DefineConstants Condition="'$(TargetFramework)' == 'net6.0' OR '$(TargetFramework)' == 'net5.0'">$(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</DefineConstants>
<DefineConstants Condition="'$(TargetFramework)' == 'net6.0'">$(DefineConstants);FEATURE_FILE_SYSTEM_INFO_LINK_TARGET;FEATURE_CREATE_SYMBOLIC_LINK</DefineConstants>
<DefineConstants Condition="'$(TargetFramework)' == 'net6.0'">$(DefineConstants);FEATURE_FILE_SYSTEM_INFO_LINK_TARGET;FEATURE_CREATE_SYMBOLIC_LINK;FEATURE_FILESTREAMOPTIONS</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Nerdbank.GitVersioning" Version="3.5.109">
Expand Down
38 changes: 34 additions & 4 deletions src/System.IO.Abstractions/DirectoryBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ internal DirectoryBase() { }
/// <inheritdoc cref="IDirectory.CreateDirectory(string)"/>
public abstract IDirectoryInfo CreateDirectory(string path);

/// <inheritdoc cref="IDirectory.CreateDirectory(string,DirectorySecurity)"/>
#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS
/// <inheritdoc cref="FileSystemAclExtensions.Create(DirectoryInfo,DirectorySecurity)"/>
#else
/// <inheritdoc cref="Directory.CreateDirectory(string,DirectorySecurity)"/>
#endif
[SupportedOSPlatform("windows")]
public abstract IDirectoryInfo CreateDirectory(string path, DirectorySecurity directorySecurity);
#if FEATURE_CREATE_SYMBOLIC_LINK
Expand All @@ -41,11 +45,19 @@ internal DirectoryBase() { }
/// <inheritdoc cref="IDirectory.Exists"/>
public abstract bool Exists(string path);

/// <inheritdoc cref="IDirectory.GetAccessControl(string)"/>
#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS
/// <inheritdoc cref="FileSystemAclExtensions.GetAccessControl(DirectoryInfo)"/>
#else
/// <inheritdoc cref="Directory.GetAccessControl(string)"/>
#endif
[SupportedOSPlatform("windows")]
public abstract DirectorySecurity GetAccessControl(string path);

/// <inheritdoc cref="IDirectory.GetAccessControl(string,AccessControlSections)"/>
#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS
/// <inheritdoc cref="FileSystemAclExtensions.GetAccessControl(DirectoryInfo)"/>
#else
/// <inheritdoc cref="Directory.GetAccessControl(string,AccessControlSections)"/>
#endif
[SupportedOSPlatform("windows")]
public abstract DirectorySecurity GetAccessControl(string path, AccessControlSections includeSections);

Expand Down Expand Up @@ -98,6 +110,11 @@ internal DirectoryBase() { }
/// <inheritdoc cref="IDirectory.GetFileSystemEntries(string,string,SearchOption)"/>
public abstract string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption);

#if FEATURE_ENUMERATION_OPTIONS
/// <inheritdoc cref="IDirectory.GetFileSystemEntries(string,string,EnumerationOptions)"/>
public abstract string[] GetFileSystemEntries(string path, string searchPattern, EnumerationOptions enumerationOptions);
#endif

/// <inheritdoc cref="IDirectory.GetLastAccessTime"/>
public abstract DateTime GetLastAccessTime(string path);

Expand All @@ -119,7 +136,20 @@ internal DirectoryBase() { }
/// <inheritdoc cref="IDirectory.Move"/>
public abstract void Move(string sourceDirName, string destDirName);

/// <inheritdoc cref="IDirectory.SetAccessControl"/>
#if FEATURE_FILE_SYSTEM_INFO_LINK_TARGET
/// <inheritdoc cref="IDirectory.ResolveLinkTarget(string, bool)"/>
public IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget)
{
return FileSystem.DirectoryInfo.New(linkPath)
.ResolveLinkTarget(returnFinalTarget);
}
#endif

#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS
/// <inheritdoc cref="FileSystemAclExtensions.SetAccessControl(DirectoryInfo, DirectorySecurity)"/>
#else
/// <inheritdoc cref="Directory.SetAccessControl(string,DirectorySecurity)"/>
#endif
public abstract void SetAccessControl(string path, DirectorySecurity directorySecurity);

/// <inheritdoc cref="IDirectory.SetCreationTime"/>
Expand Down
24 changes: 20 additions & 4 deletions src/System.IO.Abstractions/DirectoryInfoBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ internal DirectoryInfoBase() { }

/// <inheritdoc cref="IDirectoryInfo.Create()"/>
public abstract void Create();
/// <inheritdoc cref="IDirectoryInfo.Create(DirectorySecurity)"/>
#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS
/// <inheritdoc cref="FileSystemAclExtensions.Create(DirectoryInfo,DirectorySecurity)"/>
#else
/// <inheritdoc cref="DirectoryInfo.Create(DirectorySecurity)"/>
#endif
public abstract void Create(DirectorySecurity directorySecurity);

/// <inheritdoc cref="IDirectoryInfo.CreateSubdirectory(string)"/>
Expand Down Expand Up @@ -68,10 +72,18 @@ internal DirectoryInfoBase() { }
public abstract IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, EnumerationOptions enumerationOptions);
#endif

/// <inheritdoc cref="IDirectoryInfo.GetAccessControl()"/>
#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS
/// <inheritdoc cref="FileSystemAclExtensions.GetAccessControl(DirectoryInfo)"/>
#else
/// <inheritdoc cref="DirectoryInfo.GetAccessControl()"/>
#endif
public abstract DirectorySecurity GetAccessControl();

/// <inheritdoc cref="IDirectoryInfo.GetAccessControl(AccessControlSections)"/>
#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS
/// <inheritdoc cref="FileSystemAclExtensions.GetAccessControl(DirectoryInfo,AccessControlSections)"/>
#else
/// <inheritdoc cref="DirectoryInfo.GetAccessControl(AccessControlSections)"/>
#endif
public abstract DirectorySecurity GetAccessControl(AccessControlSections includeSections);

/// <inheritdoc cref="IDirectoryInfo.GetDirectories()"/>
Expand Down Expand Up @@ -120,7 +132,11 @@ internal DirectoryInfoBase() { }
/// <inheritdoc cref="IDirectoryInfo.MoveTo"/>
public abstract void MoveTo(string destDirName);

/// <inheritdoc cref="IDirectoryInfo.SetAccessControl"/>
#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS
/// <inheritdoc cref="FileSystemAclExtensions.SetAccessControl(DirectoryInfo,DirectorySecurity)"/>
#else
/// <inheritdoc cref="DirectoryInfo.SetAccessControl(DirectorySecurity)"/>
#endif
public abstract void SetAccessControl(DirectorySecurity directorySecurity);

/// <inheritdoc cref="IDirectoryInfo.Parent"/>
Expand Down
22 changes: 18 additions & 4 deletions src/System.IO.Abstractions/DirectoryInfoFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,33 @@ namespace System.IO.Abstractions
[Serializable]
internal class DirectoryInfoFactory : IDirectoryInfoFactory
{
private readonly IFileSystem fileSystem;
/// <inheritdoc />
public IFileSystem FileSystem { get; }

/// <inheritdoc />
public DirectoryInfoFactory(IFileSystem fileSystem)
{
this.fileSystem = fileSystem;
FileSystem = fileSystem;
}

/// <inheritdoc />
[Obsolete("Use `DirectoryInfoFactory.New(string)` instead")]
public IDirectoryInfo FromDirectoryName(string directoryName)
{
var realDirectoryInfo = new DirectoryInfo(directoryName);
return new DirectoryInfoWrapper(fileSystem, realDirectoryInfo);
return New(directoryName);
}

/// <inheritdoc />
public IDirectoryInfo New(string path)
{
var realDirectoryInfo = new DirectoryInfo(path);
return new DirectoryInfoWrapper(FileSystem, realDirectoryInfo);
}

/// <inheritdoc />
public IDirectoryInfo Wrap(DirectoryInfo directoryInfo)
{
return new DirectoryInfoWrapper(FileSystem, directoryInfo);
}
}
}
22 changes: 22 additions & 0 deletions src/System.IO.Abstractions/DirectoryInfoWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,17 @@ public class DirectoryInfoWrapper : DirectoryInfoBase
public DirectoryInfoWrapper(IFileSystem fileSystem, DirectoryInfo instance) : base(fileSystem)
{
this.instance = instance ?? throw new ArgumentNullException(nameof(instance));
ExtensionContainer = new FileSystemExtensionContainer(instance);
}

#if FEATURE_CREATE_SYMBOLIC_LINK
/// <inheritdoc />
public override void CreateAsSymbolicLink(string pathToTarget)
{
instance.CreateAsSymbolicLink(pathToTarget);
}
#endif

/// <inheritdoc />
public override void Delete()
{
Expand All @@ -29,6 +38,16 @@ public override void Refresh()
instance.Refresh();
}

#if FEATURE_CREATE_SYMBOLIC_LINK
/// <inheritdoc />
public override IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget)
{
//TODO(vbreuss): Unclear how to handle this case, as no explicit `FileSystemInfoWrapper` exists
//return instance.ResolveLinkTarget(returnFinalTarget);
return null;
}
#endif

/// <inheritdoc />
public override FileAttributes Attributes
{
Expand Down Expand Up @@ -62,6 +81,9 @@ public override string Extension
get { return instance.Extension; }
}

/// <inheritdoc />
public override IFileSystemExtensionContainer ExtensionContainer { get; }

/// <inheritdoc />
public override string FullName
{
Expand Down
27 changes: 21 additions & 6 deletions src/System.IO.Abstractions/DirectoryWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,8 @@ public override string[] GetDirectories(string path, string searchPattern, Searc

#if FEATURE_ENUMERATION_OPTIONS
/// <inheritdoc />
public override string[] GetDirectories(string path, string searchPattern, EnumerationOptions enumerationOptions)
public override string[] GetDirectories(string path, string searchPattern,
EnumerationOptions enumerationOptions)
{
return Directory.GetDirectories(path, searchPattern, enumerationOptions);
}
Expand Down Expand Up @@ -162,6 +163,15 @@ public override string[] GetFileSystemEntries(string path, string searchPattern,
return Directory.GetFileSystemEntries(path, searchPattern, searchOption);
}

#if FEATURE_ENUMERATION_OPTIONS
/// <inheritdoc />
public override string[] GetFileSystemEntries(string path, string searchPattern,
EnumerationOptions enumerationOptions)
{
return Directory.GetFileSystemEntries(path, searchPattern, enumerationOptions);
}
#endif

/// <inheritdoc />
public override DateTime GetLastAccessTime(string path)
{
Expand Down Expand Up @@ -273,14 +283,16 @@ public override IEnumerable<string> EnumerateDirectories(string path, string sea
}

/// <inheritdoc />
public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern, SearchOption searchOption)
public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern,
SearchOption searchOption)
{
return Directory.EnumerateDirectories(path, searchPattern, searchOption);
}

#if FEATURE_ENUMERATION_OPTIONS
/// <inheritdoc />
public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern, EnumerationOptions enumerationOptions)
public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern,
EnumerationOptions enumerationOptions)
{
return Directory.EnumerateDirectories(path, searchPattern, enumerationOptions);
}
Expand All @@ -306,7 +318,8 @@ public override IEnumerable<string> EnumerateFiles(string path, string searchPat

#if FEATURE_ENUMERATION_OPTIONS
/// <inheritdoc />
public override IEnumerable<string> EnumerateFiles(string path, string searchPattern, EnumerationOptions enumerationOptions)
public override IEnumerable<string> EnumerateFiles(string path, string searchPattern,
EnumerationOptions enumerationOptions)
{
return Directory.EnumerateFiles(path, searchPattern, enumerationOptions);
}
Expand All @@ -325,14 +338,16 @@ public override IEnumerable<string> EnumerateFileSystemEntries(string path, stri
}

/// <inheritdoc />
public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, SearchOption searchOption)
public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern,
SearchOption searchOption)
{
return Directory.EnumerateFileSystemEntries(path, searchPattern, searchOption);
}

#if FEATURE_ENUMERATION_OPTIONS
/// <inheritdoc />
public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, EnumerationOptions enumerationOptions)
public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern,
EnumerationOptions enumerationOptions)
{
return Directory.EnumerateFileSystemEntries(path, searchPattern, enumerationOptions);
}
Expand Down
28 changes: 23 additions & 5 deletions src/System.IO.Abstractions/DriveInfoFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
[Serializable]
internal class DriveInfoFactory : IDriveInfoFactory
{
private readonly IFileSystem fileSystem;
/// <inheritdoc />
public IFileSystem FileSystem { get; }

public DriveInfoFactory(IFileSystem fileSystem)
{
this.fileSystem = fileSystem;
FileSystem = fileSystem;
}

/// <summary>
Expand All @@ -21,7 +22,7 @@ public IDriveInfo[] GetDrives()
for (int index = 0; index < driveInfos.Length; index++)
{
var driveInfo = driveInfos[index];
driveInfoWrappers[index] = new DriveInfoWrapper(fileSystem, driveInfo);
driveInfoWrappers[index] = new DriveInfoWrapper(FileSystem, driveInfo);
}

return driveInfoWrappers;
Expand All @@ -31,10 +32,27 @@ public IDriveInfo[] GetDrives()
/// Initializes a new instance of the <see cref="DriveInfoBase"/> class, which acts as a wrapper for a logical drive.
/// </summary>
/// <param name="driveName">A valid drive path or drive letter.</param>
public IDriveInfo FromDriveName(string driveName)
public IDriveInfo New(string driveName)
{
var realDriveInfo = new DriveInfo(driveName);
return new DriveInfoWrapper(fileSystem, realDriveInfo);
return new DriveInfoWrapper(FileSystem, realDriveInfo);
}

/// <inheritdoc />
public IDriveInfo Wrap(DriveInfo driveInfo)
{
return new DriveInfoWrapper(FileSystem, driveInfo);
}

/// <summary>
/// Initializes a new instance of the <see cref="DriveInfoBase"/> class, which acts as a wrapper for a logical drive.
/// </summary>
/// <param name="driveName">A valid drive path or drive letter.</param>
[Obsolete("Use `DriveInfoFactory.New(string)` instead.")]
public IDriveInfo FromDriveName(string driveName)
{
return New(driveName);
}

}
}
8 changes: 6 additions & 2 deletions src/System.IO.Abstractions/FileBase.Async.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,14 @@ partial class FileBase
/// <inheritdoc cref="IFile.WriteAllLinesAsync(string,IEnumerable{string},Encoding,CancellationToken)"/>
public abstract Task WriteAllLinesAsync(string path, IEnumerable<string> contents, Encoding encoding, CancellationToken cancellationToken);

/// <inheritdoc cref="IFile.WriteAllLinesAsync(string,string[],CancellationToken)"/>
/// <inheritdoc />
// TODO(vbreuss): Check where this overload comes from!
[Obsolete("This overload is no longer supported in the interface")]
public abstract Task WriteAllLinesAsync(string path, string[] contents, CancellationToken cancellationToken);

/// <inheritdoc cref="IFile.WriteAllLinesAsync(string,string[],Encoding,CancellationToken)"/>
/// <inheritdoc />
// TODO(vbreuss): Check where this overload comes from!
[Obsolete("This overload is no longer supported in the interface")]
public abstract Task WriteAllLinesAsync(string path, string[] contents, Encoding encoding, CancellationToken cancellationToken);

/// <inheritdoc cref="IFile.WriteAllTextAsync(string,string,CancellationToken)"/>
Expand Down
Loading