private bool HaveWriteAccess(string directory)
{
bool writeAllow = false;
bool writeDeny = false;
try
{
DirectorySecurity accessControlList = Directory.GetAccessControl(directory);
if (accessControlList == null)
{
return false;
}
var rules = accessControlList.GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));
if (rules == null)
{
return false;
}
foreach (FileSystemAccessRule rule in rules)
{
if ((FileSystemRights.Write & rule.FileSystemRights) != FileSystemRights.Write)
{
continue;
}
if (rule.AccessControlType == AccessControlType.Allow)
{
writeAllow = true;
}
else if (rule.AccessControlType == AccessControlType.Deny)
{
writeDeny = true;
}
}
return writeAllow && !writeDeny;
}
catch
{
return false;
}
}
}