• c# .net 监听磁盘映射 变更,及文件夹权限1


    <script type="text/javascript"> 
    window.setInterval(showalert, 10000); 
    function showalert() 
    {
        $.get("/Home/testsystemWatcher/", function (data) {//HOME这个Controllers下的监听方法
            //每隔3秒自动同步数据库
        });
    </script>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using TestMVC.Models;
    using System.Data.SqlClient;
    using System.Collections;
    using TestMVC.Class;
    using System.IO;
    using System.Diagnostics;
    using System.Text;
    using System.Security.AccessControl;
    using System.Runtime.InteropServices;
    using System.DirectoryServices;
    using System.Threading;
    using System.Net;
    using System.Reflection;


    namespace TestMVC.Controllers
    {
        public class HomeController : Controller
        {
            //
            // GET: /Home/
            IPHostEntry myHost = new IPHostEntry();
            string stra = "";
            public ActionResult Index()
            {
                //userBLL userbll = new userBLL();
                //SqlDataReader iresult2 = userbll.getUsernameByIP(Request.UserHostAddress.ToString());
                //if (iresult2.Read())
                //{
                //    //设置COOCKIE
                //    HttpCookie myCookie = new HttpCookie(iresult2["userName"].ToString(), iresult2["userName"].ToString());
                //    Response.Cookies.Add(myCookie);
                //}
                //iresult2.Close();
                //iresult2.Dispose();

                //Dictionary<string, string> stackholder = new Dictionary<string, string>();
                //stackholder.Add("name", "value");
                //stackholder.Add("name1", "value1");
                //stackholder.Add("name2", "value2");
                //stackholder.Add("name3", "value3");
                //ViewData["stackholder"] = stackholder;
                string strresult = "登录失败";
                string strusername = Request["userName"];
                string userpwd = Request["userPwd"];
                userModel loginmodel = new userModel();
                userBLL userbll = new userBLL();
                SqlDataReader iresult = userbll.islogin(strusername, userpwd);
                if (iresult.Read())
                {
                    strresult = "登录成功";
                    //设置COOCKIE
                    HttpCookie myCookie = new HttpCookie("username", iresult["userName"].ToString());
                    Response.Cookies.Add(myCookie);
                }
                iresult.Close();
                iresult.Dispose();
                ViewBag.result = strusername + strresult;
                //ViewBag.strip = IPHostEntry.AddressList

                myHost = Dns.GetHostEntry(Dns.GetHostName());
                for (int i = 0; i < myHost.AddressList.Length; i++)
                {
                    if (myHost.AddressList[i].ToString().IndexOf("192.168") >= 0)
                    {
                        //stra += "本地主机IP地址->" + myHost.AddressList[i].ToString() + "-" + Request.UserHostAddress;
                        stra += Request.UserHostAddress;
                    }


                }
                SqlDataReader iresult2 = userbll.getUsernameByIP(Request.UserHostAddress.ToString());
                if (iresult2.Read())
                {
                    strresult = "登录成功";
                    //设置COOCKIE
                    HttpCookie myCookie = new HttpCookie(iresult2["userName"].ToString(), iresult2["userName"].ToString());
                    Response.Cookies.Add(myCookie);
                }
                iresult2.Close();
                iresult2.Dispose();



                ViewBag.strip = stra;

                return View();


            }

            #region 用户登录
            public string login()
            {
                string strresult = "登录失败";
                string strusername = Request["userName"];
                string userpwd = Request["userPwd"];
                userModel loginmodel = new userModel();
                userBLL userbll = new userBLL();
                SqlDataReader iresult = userbll.islogin(strusername, userpwd);
                if (iresult.Read())
                {
                    strresult = "登录成功";
                    //设置COOCKIE
                    HttpCookie myCookie = new HttpCookie("username", iresult["uid"].ToString());
                    Response.Cookies.Add(myCookie);
                }
                return strresult;
            }
            #endregion

            public ActionResult userList()
            {

                if (Request.Cookies["username"] != null)
                {
                    HttpCookie getusercookie = Request.Cookies["username"];//获取COOKIE中的值
                    if (!string.IsNullOrEmpty(getusercookie.Value))
                    {
                        string strusername = getusercookie.Value;
                    }
                }

                userBLL userbll = new userBLL();
                IList<userModel> luser = userbll.getlist();
                ViewData["luser"] = luser;
                return View();
            }

            #region 删除用户
            public string deluser()
            {
                string strresult = "删除失败";
                int uid = Request["uid"] != null ? Convert.ToInt32(Request["uid"]) : 0;
                userBLL userbll = new userBLL();
                int iresult = userbll.deluser(uid);
                if (iresult > 0)
                {
                    strresult = "删除成功";
                }
                return strresult.ToString();
            }
            #endregion

            #region 修改个人资料
            public string updateuser()
            {
                string strresult = "修改失败";
                int uid = Request["uid"] != null ? Convert.ToInt32(Request["uid"]) : 0;
                //string userpwd = Request["userPwd"];
                //userModel loginmodel = new userModel();
                userBLL userbll = new userBLL();
                //int iresult = userbll.deluser(uid);
                //if (iresult > 0)
                //{
                //    strresult = "修改成功";
                //}
                return strresult.ToString();
            }
            #endregion

            public string CreateDirectory()
            {



                //string path = "G:\\";
                string path = "D:\\iis2";
                uint state = 0;

                if (!Directory.Exists("Z:"))
                {

                    state = WNetHelper.WNetAddConnection(@"administrator", "654321", @"\\192.168.1.225\E:\testweb1", "Z:");

                }

                if (state.Equals(0))
                {

                    Directory.CreateDirectory(path);//创建本地一个路径

                    Process process = new Process();
                    ProcessStartInfo startInfo = new ProcessStartInfo();
                    startInfo.FileName = " cmd.exe ";
                    startInfo.Arguments = @" /c E:\o.bat";
                    startInfo.UseShellExecute = false;
                    startInfo.RedirectStandardInput = false;
                    startInfo.RedirectStandardOutput = false;
                    startInfo.CreateNoWindow = true;
                    process.StartInfo = startInfo;

                    process.Start();
                    //process.WaitForExit();
                    process.Dispose();
                    return "";

                }

                else
                {

                    throw new Exception("添加驱动器错误" + state.ToString());

                }

            }

            #region 映射服务器目录到本地磁盘
            public string WriteToFile()
            {
                string strresult = "";
                HttpCookie getusercookie = Request.Cookies["username"];//获取COOKIE中的值
                if (getusercookie == null)
                {
                    strresult = "请先登录";
                }
                else
                {
                    string username = getusercookie.Value;// "wyb";//当前登录用户名
                    string userpwd = "123456";//密码
                    //创建文件(user:用户名提取当前登录用户的ID做为远程登录的用户名。区别大小写)
                    System.IO.StreamWriter sw = new System.IO.StreamWriter(@"E:\fabu\1.bat");
                    sw.WriteLine("net use x: \\\\192.168.1.225\\web2 \"" + userpwd + "\" /user:\"" + username + "\"");
    // net use x: \\192.168.1.225\files "123456" /user:"intop_225user1" /persistent:yes //记住连接,开机自动连接
    //pause
                    sw.WriteLine("pause");
                    sw.Flush();
                    sw.Close();

                    string filePath = Server.MapPath("~/1.bat");//路径+文件名。这个路径要和上面的统一

                    FileStream fs = new FileStream(filePath, FileMode.Open);
                    byte[] bytes = new byte[(int)fs.Length];
                    fs.Read(bytes, 0, bytes.Length);
                    fs.Close();
                    Response.ContentType = "application/octet-stream";
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("1.bat", System.Text.Encoding.UTF8));
                    Response.BinaryWrite(bytes);
                    Response.Flush();
                    Response.End();

                    //首先清除其他连接会话
                    Process processClear = new Process();
                    ProcessStartInfo startInfoClear = new ProcessStartInfo();
                    startInfoClear.FileName = " cmd.exe ";
                    startInfoClear.Arguments = @" /c E:\fabu\clear.bat";
                    startInfoClear.UseShellExecute = false;
                    startInfoClear.RedirectStandardInput = false;
                    startInfoClear.RedirectStandardOutput = false;
                    startInfoClear.CreateNoWindow = true;
                    processClear.StartInfo = startInfoClear;
                    processClear.Start();
                    //process.WaitForExit();无限期等待执行
                    processClear.Dispose();

                    执行文件
                    //Process process = new Process();
                    //ProcessStartInfo startInfo = new ProcessStartInfo();
                    //startInfo.FileName = " cmd.exe ";
                    //startInfo.Arguments = @" /c E:\mingling\1.bat";
                    //startInfo.UseShellExecute = false;
                    //startInfo.RedirectStandardInput = false;
                    //startInfo.RedirectStandardOutput = false;
                    //startInfo.CreateNoWindow = true;
                    //process.StartInfo = startInfo;
                    //process.Start();
                    process.WaitForExit();
                    //process.Dispose();
                }

                return strresult;
            }
            #endregion

            #region 移除磁盘映射
            public string DelWriteToFile()
            {
                System.IO.StreamWriter sw = new System.IO.StreamWriter(@"E:\fabu\-1.bat");
                sw.WriteLine("net use x: /delete");
                sw.WriteLine("pause");
                sw.Flush();
                sw.Close();

                string filePath = Server.MapPath("~/-1.bat");//路径+文件名

                FileStream fs = new FileStream(filePath, FileMode.Open);
                byte[] bytes = new byte[(int)fs.Length];
                fs.Read(bytes, 0, bytes.Length);
                fs.Close();
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("-1.bat", System.Text.Encoding.UTF8));
                Response.BinaryWrite(bytes);
                Response.Flush();
                Response.End();

                //Process process = new Process();
                //ProcessStartInfo startInfo = new ProcessStartInfo();
                //startInfo.FileName = " cmd.exe ";
                //startInfo.Arguments = @" /c E:\mingling\-1.bat";
                //startInfo.UseShellExecute = false;
                //startInfo.RedirectStandardInput = false;
                //startInfo.RedirectStandardOutput = false;
                //startInfo.CreateNoWindow = true;
                //process.StartInfo = startInfo;

                //process.Start();
                process.WaitForExit();
                //process.Dispose();
                return "";
            }
            #endregion

            #region 本地映射磁盘与服务器同步(同步增删改查)
            /// <summary>
            /// 本地映射磁盘与服务器同步(同步增删改查)
            /// </summary>
            /// <returns></returns>
            public string toCallServer()
            {
                //循环文件夹及文件,和SQL里条数对比
                FilesBLL filesbll = new FilesBLL();
                string str = "";
                string str1 = "";
                string str2 = "";
                string path = @"E:\web2";
                HttpCookie getusercookie = Request.Cookies["ipadd"];//获取COOKIE中的值
                if (!string.IsNullOrEmpty(getusercookie.Value))
                {
                    stra = getusercookie.Value;
                }
                string loginname = stra;//当前系统登录者的名称(此外需要用Cookie里的IP转化成用户名)
                DirectoryInfo thisOne = new DirectoryInfo(path);
                str1 = GetFile1(thisOne, 0, str1);
                str2 = GetFile2(thisOne, 0, str2);
                str = str1 + str2;
                str = str.Substring(0, str.Length - 1);//去掉最后一个拼接符^
                string[] zustr = str.Split('^');//以拼接符^分隔出来文件名
                try
                {
                    foreach (string strone in zustr)
                    {
                        //此处,拿文件名去匹配数据库文件表,是否有同样名称及目录的文件
                        SqlDataReader iresult = filesbll.checkFile(strone.Split('&')[0], strone.Split('&')[1]);
                        if (iresult.Read())
                        {
                            //如果数据库里有文件名且路径与本地一致,再查检最后修改时间同否一致(以后再做此功能)
                        }
                        else
                        {
                            //如果文件名及文件完整路径,数据库里没有匹配项,则表示本地新增文件,则自动在数据库里增加一条记录
                            int isresult = filesbll.add(strone.Split('&')[0], loginname, strone.Split('&')[1]);
                            //数据库里同步成功新增isresult++条
                        }

                        string strname = strone;
                    }
                    //如果数据库里记录比本地条数多,则表示本地文件已删除,数据库也同步删除
                    string strToSQL = "";
                    IList<FilesModel> lfiles = filesbll.getlist();
                    foreach (FilesModel model in lfiles)
                    {
                        strToSQL = model.fiName + "&" + model.fiPath;//根本本地拼接方法一致(文件名&完整路径)
                        if (str.IndexOf(strToSQL) < 0)//如果本地文件列表中没有数据库中某一条,表示本地文件已删除,此时数据库也同步删除
                        {
                            int isresult = filesbll.delFile("and fiName='" + model.fiName + "' and fiPath='" + model.fiPath + "' ");
                            //数据库里同步删除成功isresult++条
                        }
                    }
                }
                catch (Exception ex)
                {

                    string filePath = @"D:/TempExceptions.txt";
                    StreamWriter sw = System.IO.File.AppendText(filePath);
                    sw.Write("\r\n" + "错误信息:" + ex.ToString() + "\r\n时间:" + System.DateTime.Now + "\r\n" + "\r\n");
                    sw.Close();
                }
                return str;
            }
            #endregion

            #region 获取指定文件夹下所有子目录下的文件(不包括指定目录根目录下的文件)
            /// <summary>
            /// 获取指定文件夹下所有子目录下的文件(不包括指定目录根目录下的文件)
            /// </summary>
            /// <param name="theDir">指定目录</param>
            /// <param name="nLevel">默认起始值,调用时,一般为0</param>
            /// <param name="Rn">用于迭加的传入值,一般为空</param>
            /// <returns></returns>
            public static string GetFile1(DirectoryInfo theDir, int nLevel, string Rn)//递归目录 文件
            {
                DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录
                foreach (DirectoryInfo dirinfo in subDirectories)
                {
                    FileInfo[] fileInfo = dirinfo.GetFiles();   //目录下的文件
                    foreach (FileInfo fInfo in fileInfo)
                    {
                        if (fInfo.Name.ToString().IndexOf("~$") < 0)//排除临时缓存文件
                        {
                            Rn += fInfo.Name.ToString() + "&" + fInfo.FullName.ToString() + "^";//以&作为文件和文件名的分隔符,以^号作为每个文件的分隔符
                        }
                    }
                    Rn = GetFile1(dirinfo, nLevel + 1, Rn);
                }
                return Rn;
            }
            #endregion

            #region 获取指定目录根目录下的文件
            /// <summary>
            /// 获取指定目录根目录下的文件
            /// </summary>
            /// <param name="theDir">指定目录</param>
            /// <param name="nLevel">默认起始值,调用时,一般为0</param>
            /// <param name="Rn">用于迭加的传入值,一般为空</param>
            /// <returns></returns>
            public static string GetFile2(DirectoryInfo theDir, int nLevel, string Rn)//递归目录 文件
            {
                FileInfo[] fileInfo2 = theDir.GetFiles();   //目录下的文件
                foreach (FileInfo fInfo in fileInfo2)
                {
                    if (fInfo.Name.ToString().IndexOf("~$") < 0)//排除临时缓存文件
                    {
                        Rn += fInfo.Name.ToString() + "&" + fInfo.FullName.ToString() + "^";以&作为文件和文件名的分隔符,以^号作为每个文件的分隔符
                    }
                }
                return Rn;
            }
            #endregion

            //用户标志 
            private enum UserFlags
            {
                UF_SCRIPT = 0x0001,
                UF_ACCOUNTDISABLE = 0x0002,
                UF_HOMEDIR_REQUIRED = 0x0008,
                UF_LOCKOUT = 0x0010,
                UF_PASSWD_NOTREQD = 0x0020,
                UF_PASSWD_CANT_CHANGE = 0x0040,
                UF_TEMP_DUPLICATE_ACCOUNT = 0x0100,
                UF_NORMAL_ACCOUNT = 0x0200,
                UF_DONT_EXPIRE_PASSWD = 0x10000,
                UF_PASSWORD_EXPIRED = 0x800000
            }

            #region 新建一个用户
            /// <summary>
            /// 新建一个用户
            /// </summary>
            /// <param name="userName">用户名</param>
            /// <param name="userPass">密码</param>
            /// <param name="userComment">用户说明</param>
            /// <param name="userGroup">用户组</param>
            /// <returns></returns>
            public bool UserAdd(string userName, string userPass, string userComment, string userGroup)
            {
                try
                {
                    userName = Request["userName"].ToString();//要创建的计算机用户名
                    userPass = Request["userPwd"].ToString();//用户密码
                    userComment = "shuoming";
                    userGroup = "Administrators";//先默认属于管理员组
                    DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
                    //create user 
                    DirectoryEntry NewUser = AD.Children.Add(userName, "user");
                    //set password 
                    NewUser.Invoke("SetPassword", new object[] { userPass });
                    //set comment 
                    NewUser.Invoke("Put", new object[] { "Description", userComment });
                    //save 
                    NewUser.CommitChanges();
                    //add user to group 
                    DirectoryEntry grp = AD.Children.Find(userGroup, "group");
                    if (grp != null)
                    {
                        grp.Invoke("Add", new object[] { NewUser.Path.ToString() });
                    }
                    return true;
                }
                catch (Exception ex) { return false; }
            }
            #endregion

            #region 新建一个组
            /// <summary>
            /// 新建一个组
            /// </summary>
            /// <param name="groupName">用户组名</param>
            /// <param name="groupComment">组说明</param>
            /// <returns></returns>
            public bool GroupAdd(string groupName, string groupComment)
            {
                try
                {
                    groupName = Request["groupName"].ToString();//要创建的计算机用户组名
                    groupComment = Request["groupComment"].ToString();//要创建的计算机用户组说明
                    DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
                    //create group 
                    DirectoryEntry NewGroup = AD.Children.Add(groupName, "group");
                    //set comment 
                    NewGroup.Invoke("Put", new object[] { "Description", groupComment });
                    //save 
                    NewGroup.CommitChanges(); return true;
                }
                catch (Exception ex) { return false; }
            }
            #endregion

            //将用户添加到组 
            public static bool UserAddToGroup(string userName, string groupName)
            {
                try
                {
                    DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
                    DirectoryEntry user = AD.Children.Find(userName, "user");
                    DirectoryEntry grp = AD.Children.Find(groupName, "group");
                    grp.Invoke("Add", new object[] { user.Path.ToString() }); return true;
                }
                catch (Exception ex) { return false; }
            }
            //修改用户密码 
            public static bool UserSetPassword(string userName, string userPass)
            {
                try
                {
                    DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
                    //create user 
                    DirectoryEntry user = AD.Children.Find(userName, "user");
                    //set  password 
                    user.Invoke("SetPassword", new object[] { userPass });
                    user.CommitChanges(); return true;
                }
                catch (Exception ex) { return false; }
            }
            //启用用户 
            public bool UserEnable(string userName)
            {
                try
                {
                    userName = Request["userName"].ToString();//要创建的计算机用户名
                    DirectoryEntry user = new DirectoryEntry("WinNT://" + Environment.MachineName + "/" + userName + ",user");
                    user.Properties["UserFlags"].Value = ((int)user.Properties["userFlags"].Value) ^ (int)UserFlags.UF_ACCOUNTDISABLE; user.CommitChanges(); user.Close(); return true;
                }
                catch (Exception ex) { return false; }
            }
            //禁用用户 
            public static bool UserDisable(string userName)
            {
                try
                {
                    DirectoryEntry user = new DirectoryEntry("WinNT://" + Environment.MachineName + "/" + userName + ",user");
                    user.Properties["UserFlags"].Value = ((int)user.Properties["userFlags"].Value) | (int)UserFlags.UF_ACCOUNTDISABLE; user.CommitChanges(); user.Close(); return true;
                }
                catch (Exception ex) { return false; }
            }
            //删除用户 
            public static bool UserDel(string userName)
            {
                try
                {
                    DirectoryEntry localDirectory = new DirectoryEntry("WinNT://" + Environment.MachineName.ToString());
                    DirectoryEntries users = localDirectory.Children; DirectoryEntry user = users.Find(userName, "user"); users.Remove(user); return true;
                }
                catch (Exception ex) { return false; }
            }
            //删除组 
            public static bool GroupDel(string groupName)
            {
                try
                {
                    DirectoryEntry localDirectory = new DirectoryEntry("WinNT://" + Environment.MachineName.ToString());
                    DirectoryEntries groups = localDirectory.Children; DirectoryEntry group = groups.Find(groupName, "group"); groups.Remove(group); return true;
                }
                catch (Exception ex) { return false; }
            }
            //在这里新增函数 


  • 相关阅读:
    Python学习第15天_模块
    Python学习第14天_文件读取写入
    Python学习第13天_练习(图书馆的创建)
    Python学习第12天_类
    Python学习第11天_参数
    Python学习第10天_函数
    Python学习第九天_模块的应用
    Android Bluetooth HIDL服务分析
    Mac下CLion配置Google GTest小结
    MacOS通过homebrew安装老版本的软件
  • 原文地址:https://www.cnblogs.com/wybshyy/p/16042837.html
Copyright © 2020-2023  润新知