Mega Code Archive

 
Categories / C# / File Stream
 

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;         }     } }