Check Write Permission
确认程序是否对文件夹有写权限
public bool CheckWritePermissionOnDir(string path, bool checkUserAccountControl = false)
{
bool writeAllow = false;
bool writeDeny = false;
bool administratorPermission = true;
DirectorySecurity directorySecurity = Directory.GetAccessControl(path);
if (directorySecurity==null)
{
return false;
}
AuthorizationRuleCollection authorizationRuleCollection = directorySecurity.GetAccessRules(true, true, typeof(NTAccount));
//AuthorizationRuleCollection authorizationRuleCollection = directorySecurity.GetAccessRules(true, true, typeof(SecurityIdentifier));
if (authorizationRuleCollection == null)
{
return false;
}
foreach (FileSystemAccessRule rule in authorizationRuleCollection)
{
if ((FileSystemRights.Write& rule.FileSystemRights) != FileSystemRights.Write)
{
continue;
}
if(rule.AccessControlType==AccessControlType.Allow)
{
writeAllow = true;
if (rule.IdentityReference.Value=="BUILTIN\\Users" || rule.IdentityReference.Value == "NT AUTHORITY\\Authenticated Users")
{
administratorPermission = false;
}
}
else if (rule.AccessControlType == AccessControlType.Deny)
{
writeDeny = true;
}
}
if (checkUserAccountControl)
{
return writeAllow && !writeDeny && !administratorPermission;
}
else
{
return writeAllow && !writeDeny;
}
}
FileStream
写入文件
using (FileStream DestinationStream = new FileStream(pathElogTextRegistryLocal, FileMode.Create))
{
await stream.CopyToAsync(DestinationStream);
}
FileStream与StreamReader区别
FileStream类提供了在文件中读写字节的方法,但经常使用StreamReader或 StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而StreamReader类操作的是字符数据。因此FileStream类既可以对文本文件进行读写也可以对多媒体文件进行读写,多用于对大文件进行读写,且它对文件可进行分步读写,减小内存压力。而StreamReader和StreamWriter类多用于对小文件读写。
- FileStream操作字节,更适合大文件。
- StreamReader操作字符,更适合小文件。