Is File readable or writeable
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.AccessControl;
using System.IO;
using System.Security.Principal;
namespace Td.Additional.IO
{
/// <summary>
/// File facilities.
/// </summary>
public static class File
{
/// <summary>
/// Determines whether the specified file is readable.
/// </summary>
/// <param name="filename">The filename.</param>
/// <returns>
/// <c>true</c> if the specified file is readable; otherwise, <c>false</c>.
/// </returns>
public static bool IsReadable(string filename)
{
WindowsIdentity principal = WindowsIdentity.GetCurrent();
if (System.IO.File.Exists(filename))
{
FileInfo fi = new FileInfo(filename);
AuthorizationRuleCollection acl =
fi.GetAccessControl().GetAccessRules(true, true, typeof(SecurityIdentifier));
for (int i = 0; i < acl.Count; i++)
{
System.Security.AccessControl.FileSystemAccessRule rule = (System.Security.AccessControl.FileSystemAccessRule)acl[i];
if (principal.User.Equals(rule.IdentityReference))
{
if (System.Security.AccessControl.AccessControlType.Deny.Equals
(rule.AccessControlType))
{
if ((((int)FileSystemRights.Read) & (int)rule.FileSystemRights) == (int)(FileSystemRights.Read))
return false;
}
else if (System.Security.AccessControl.AccessControlType.Allow.Equals
(rule.AccessControlType))
{
if ((((int)FileSystemRights.Read) & (int)rule.FileSystemRights) == (int)(FileSystemRights.Read))
return true;
}
}
}
}
else
{
return false;
}
return false;
}
/// <summary>
/// Determines whether the specified file is writeable.
/// </summary>
/// <param name="filename">The filename.</param>
/// <returns>
/// <c>true</c> if the specified file is writeable; otherwise, <c>false</c>.
/// </returns>
public static bool IsWriteable(string filename)
{
WindowsIdentity principal = WindowsIdentity.GetCurrent();
if (System.IO.File.Exists(filename))
{
FileInfo fi = new FileInfo(filename);
if (fi.IsReadOnly)
return false;
AuthorizationRuleCollection acl =
fi.GetAccessControl().GetAccessRules(true, true, typeof(SecurityIdentifier));
for (int i = 0; i < acl.Count; i++)
{
System.Security.AccessControl.FileSystemAccessRule rule = (System.Security.AccessControl.FileSystemAccessRule)acl[i];
if (principal.User.Equals(rule.IdentityReference))
{
if (System.Security.AccessControl.AccessControlType.Deny.Equals
(rule.AccessControlType))
{
if ((((int)FileSystemRights.Write) & (int)rule.FileSystemRights) == (int)(FileSystemRights.Write))
return false;
}
else if (System.Security.AccessControl.AccessControlType.Allow.Equals
(rule.AccessControlType))
{
if ((((int)FileSystemRights.Write) & (int)rule.FileSystemRights) == (int)(FileSystemRights.Write))
return true;
}
}
}
}
else
{
return false;
}
return false;
}
}
}
Related examples in the same category