-
Notifications
You must be signed in to change notification settings - Fork 264
Expand file tree
/
Copy pathFileStreamAclExtensions.cs
More file actions
47 lines (43 loc) · 1.7 KB
/
FileStreamAclExtensions.cs
File metadata and controls
47 lines (43 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System.Runtime.Versioning;
using System.Security.AccessControl;
namespace System.IO.Abstractions
{
/// <summary>
/// ACL (access control list) extension methods for <see cref="FileSystemStream" />.
/// </summary>
public static class FileStreamAclExtensions
{
#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS
/// <inheritdoc cref="FileSystemAclExtensions.GetAccessControl(FileStream)" />
#else
/// <inheritdoc cref="FileStream.GetAccessControl()"/>
#endif
[SupportedOSPlatform("windows")]
public static FileSecurity GetAccessControl(this FileSystemStream fileStream)
{
IFileSystemAclSupport aclSupport = fileStream as IFileSystemAclSupport;
var fileSecurity = aclSupport?.GetAccessControl() as FileSecurity;
if (aclSupport == null || fileSecurity == null)
{
throw new NotSupportedException("The file stream does not support ACL extensions");
}
return fileSecurity;
}
#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS
/// <inheritdoc cref="FileSystemAclExtensions.SetAccessControl(FileStream, FileSecurity)" />
#else
/// <inheritdoc cref="FileStream.SetAccessControl(FileSecurity)"/>
#endif
[SupportedOSPlatform("windows")]
public static void SetAccessControl(this FileSystemStream fileStream,
FileSecurity fileSecurity)
{
IFileSystemAclSupport aclSupport = fileStream as IFileSystemAclSupport;
if (aclSupport == null)
{
throw new NotSupportedException("The file info does not support ACL extensions");
}
aclSupport.SetAccessControl(fileSecurity);
}
}
}