关键词搜索

源码搜索 ×
×

C#程序验证系统登录用户与目录权限

发布2018-05-15浏览1949次

详情内容

Windows用户类型:Administrator、Guest、自定义用户等;文件的权限不外乎:Read、Write、Modify、Remove等等,其中拥有所有权限的字符叫做FullControl。

  C#当前程序用户路径权限验证

  1. /// <summary>
  2. /// 是否拥有程序数据路径权限
  3. /// </summary>
  4. private static bool HasProgramDataRights=false;
  5. public static bool IsAdministrator()
  6. {
  7. System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
  8. System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
  9. return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
  10. }
  11. /// <summary>
  12. /// 读取系统程序数据路径权限&判断是否可以使用临时目录进行保存操作
  13. /// </summary>
  14. /// <param name="path"></param>
  15. public void ReadProgramDataRights(string path)
  16. {
  17. // 通过判定文件的权限来控制路径
  18. System.Security.AccessControl.DirectorySecurity dirSec = new System.IO.DirectoryInfo(path).GetAccessControl();
  19. System.Security.AccessControl.AuthorizationRuleCollection rules = dirSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
  20. foreach (System.Security.AccessControl.FileSystemAccessRule rule in rules)
  21. {
  22. Console.WriteLine(path + "文件目录权限字符:" + rule.FileSystemRights);
  23. // 判定文件是否具有FullControl或Write权限
  24. if (rule.FileSystemRights.ToString().Equals("FullControl") || rule.FileSystemRights.ToString().Equals("Write"))
  25. {
  26. HasProgramDataRights = true;
  27. break;
  28. }
  29. }
  30. // 为IE保护模式创建临时保存路径
  31. if (HasProgramDataRights)
  32. {
  33. // 创建操作路径
  34. string recordTemp = FileHelp.GetAppDataLocalLow() + "\\CvNetVideo\\Record\\";
  35. string screenshotTemp = FileHelp.GetAppDataLocalLow() + "\\CvNetVideo\\Screenshot\\";
  36. string recordDst = FileHelp.GetCommonApplicationData() + "\\CvNetVideo\\Record\\";
  37. string screenshotDst = FileHelp.GetCommonApplicationData() + "\\CvNetVideo\\Screenshot\\";
  38. Directory.CreateDirectory(recordTemp);
  39. Directory.CreateDirectory(screenshotTemp);
  40. Directory.CreateDirectory(recordDst);
  41. Directory.CreateDirectory(screenshotDst);
  42. }
  43. }

C#文件操作工具类

  1.  public class FileHelp
  2.     {
  3.         public enum GetDirectoryType
  4.         {
  5.             ByAppDomain,
  6.             ByAssembly
  7.         }
  8.         public static string GetCurrentDirectory(GetDirectoryType type = GetDirectoryType.ByAppDomain)
  9.         {
  10.             switch (type)
  11.             {
  12.                 case GetDirectoryType.ByAppDomain:
  13.                     return AppDomain.CurrentDomain.BaseDirectory;
  14.                 case GetDirectoryType.ByAssembly:
  15.                     return Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
  16.                 default:
  17.                     return AppDomain.CurrentDomain.BaseDirectory;
  18.             }
  19.         }
  20.         public static string GetCurrentDirectoryByAssembly()
  21.         {
  22.             return GetCurrentDirectory(GetDirectoryType.ByAssembly);
  23.         }
  24.         /// <summary>
  25.         ///程序数据路径- C:\ProgramData
  26.         /// </summary>
  27.         /// <returns></returns>
  28.         public static string GetCommonApplicationData()
  29.         {
  30.             return Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
  31.         }
  32.         /// <summary>
  33.         /// 用户数据路径
  34.         /// </summary>
  35.         /// <returns></returns>
  36.         public static string GetApplicationData()
  37.         {
  38.             return Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
  39.         }
  40.         /// <summary>
  41.         /// 用户数据本地路径
  42.         /// </summary>
  43.         /// <returns></returns>
  44.         public static string GetLocalApplicationData()
  45.         {
  46.             return Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
  47.         }
  48.         /// <summary>
  49.         /// 用户路径
  50.         /// </summary>
  51.         /// <returns></returns>
  52.         public static string GetUserProfile()
  53.         {
  54.             return Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
  55.         }
  56.         /// <summary>
  57.         /// 用户的图片路径
  58.         /// </summary>
  59.         /// <returns></returns>
  60.         public static string GetMyPictures()
  61.         {
  62.             return Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
  63.         }
  64.         /// <summary>
  65.         /// 用户的视频路径
  66.         /// </summary>
  67.         /// <returns></returns>
  68.         public static string GetMyVideos()
  69.         {
  70.             return Environment.GetFolderPath(Environment.SpecialFolder.MyVideos);
  71.         }
  72.         /// <summary>
  73.         /// 用户的文档路径
  74.         /// </summary>
  75.         /// <returns></returns>
  76.         public static string GetMyDocuments()
  77.         {
  78.             return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  79.         }
  80.         /// <summary>
  81.         /// IE保护模式下的低权限操作路径(Temporary Internet Files/Low)
  82.         /// 参考:https://blog.csdn.net/xt_xiaotian/article/details/5336809
  83.         /// </summary>
  84.         /// <returns></returns>
  85.         public static string GetTemporaryInternetFiles()
  86.         {
  87.             return GetLocalApplicationData()+ "\\Microsoft\\Windows\\Temporary Internet Files\\Low";
  88.         }
  89.         /// <summary>
  90.         /// IE保护模式下的低权限操作路径(%userprofile%/AppData/LocalLow)
  91.         /// 参考:https://blog.csdn.net/xt_xiaotian/article/details/5336809
  92.         /// </summary>
  93.         /// <returns></returns>
  94.         public static string GetAppDataLocalLow()
  95.         {
  96.             return GetUserProfile() + "\\AppData\\LocalLow";
  97.         }
  98.         /// <summary>
  99.         /// 获取系统字体文件路径
  100.         /// </summary>
  101.         /// <returns></returns>
  102.         public static string GetFonts()
  103.         {
  104.             return Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
  105.         }
  106.         /// <summary>
  107.         /// 二进制文件读取
  108.         /// </summary>
  109.         /// <param name="FileUrl">文件路径</param>
  110.         /// <returns></returns>
  111.         public static byte[] BinaryRead(string FileUrl)
  112.         {
  113.             List<byte> lst = new List<byte>();
  114.             try
  115.             {
  116.                 //文件路径
  117.                 String filename = FileUrl;
  118.                 //打开文件
  119.                 FileStream FStream;
  120.                 if (File.Exists(filename))
  121.                 {
  122.                     FStream = new FileStream(filename, FileMode.Open);
  123.                 }
  124.                 else
  125.                 {
  126.                     return null;
  127.                 }
  128.                 int BufferSize = 1048576; //每次读取的字节数 每次读取1MB
  129.                 byte[] Buffer = new byte[BufferSize];
  130.                 long FileLength = FStream.Length;//文件流的长度
  131.                 int ReadCount = (int)(FileLength / BufferSize) + 1; //需要对文件读取的次数
  132.                                                                     //数据读取
  133.                 BinaryReader BWrite = new BinaryReader(FStream);
  134.                 //br.BaseStream.Seek(0, SeekOrigin.Begin);
  135.                 //while (br.BaseStream.Position < br.BaseStream.Length){}
  136.                 for (int a = 0; a < ReadCount; a++)
  137.                 {
  138.                     Buffer = BWrite.ReadBytes(BufferSize);
  139.                     lst.AddRange(Buffer);
  140.                 }
  141.                 BWrite.Close();
  142.                 BWrite.Close();
  143.                 return lst.ToArray();
  144.             }
  145.             catch (System.Exception ex)
  146.             {
  147.                 Log.WriteLog4Ex("FileHelp.BinaryRead", ex);
  148.                 return null;
  149.             }
  150.         }
  151.         /// <summary>
  152.         /// 二进制文件写入
  153.         /// </summary>
  154.         /// <param name="Bts"></param>
  155.         /// <param name="DirectoryUrl">文件目录路径</param>
  156.         /// <param name="FileName">文件名称</param>
  157.         /// <returns></returns>
  158.         public static bool BinaryWrite(byte[] Bts, string DirectoryUrl, string FileName)
  159.         {
  160.             try
  161.             {
  162.                 //文件路径
  163.                 string Filepath = DirectoryUrl + "\\" + FileName;
  164.                 //目录创建
  165.                 if (!Directory.Exists(DirectoryUrl))
  166.                     Directory.CreateDirectory(DirectoryUrl);
  167.                 //文件创建
  168.                 FileStream FStream;
  169.                 if (File.Exists(Filepath))
  170.                 {
  171.                     FStream = new FileStream(Filepath, FileMode.Append);
  172.                 }
  173.                 else
  174.                 {
  175.                     FStream = new FileStream(Filepath, FileMode.Create);
  176.                 }
  177.                 //数据写入
  178.                 BinaryWriter BWrite = new BinaryWriter(FStream);
  179.                 BWrite.Write(Bts);
  180.                 BWrite.Close();
  181.                 FStream.Close();
  182.                 return true;
  183.             }
  184.             catch (System.Exception ex)
  185.             {
  186.                 Log.WriteLog4Ex("FileHelp.BinaryWrite", ex);
  187.                 return false;
  188.             }
  189.         }
  190.         /// <summary>
  191.         /// 二进制文件删除
  192.         /// </summary>
  193.         /// <param name="FileUrl">文件路径</param>
  194.         public static void FileDelete(string FileUrl)
  195.         {
  196.             try
  197.             {
  198.                 //文件路径
  199.                 String filename = FileUrl;
  200.                 //删除文件
  201.                 if (File.Exists(filename))
  202.                 {
  203.                     File.Delete(filename);
  204.                 }
  205.             }
  206.             catch (System.Exception ex)
  207.             {
  208.                 Log.WriteLog4Ex("FileHelp.FileDelete", ex);
  209.             }
  210.         }
  211.     }
注:如果您是开发OCX遇到路径问题请使用工具类中IE保护模式下的低权限路径。

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载