7-17 task

//USBManager.cs
        private void btnUser2USB_Click(object sender, EventArgs e)
        {
            DsDoorPrivilege.UserDataTable userlist = dgUsers.DataSource as DsDoorPrivilege.UserDataTable;
            if (userlist != null)
            {
                EmployeeBusiness eb = new EmployeeBusiness();
                List<Employee> employeeList = eb.GetList();

                List<UserDataStruct> UserDataStructlist = new List<UserDataStruct>();

                foreach (DsDoorPrivilege.UserRow ur in userlist.Rows)
                {
                    #region collect userstruce
                    UserDataStruct userstruct = new UserDataStruct();
                    //pin
                    userstruct.PIN = ushort.Parse(ur.EMPLOYEE_NUMBER);
                    Employee employee = employeeList.Find(delegate(Employee emp) { return emp.EMPLOYEE_ID == int.Parse(ur.EMPLOYEE_NUMBER); });
                    if (employee == null)
                        continue;
                    //employee.PRIVILEGE
                    switch ((DeviceAPIAdapter.Constant.MachinePrivilege)employee.PRIVILEGE)
                    {
                        case DeviceAPIAdapter.Constant.MachinePrivilege.CommonUser:
                        case DeviceAPIAdapter.Constant.MachinePrivilege.Enroller:
                            userstruct.Privilege = (byte)0;
                            break;
                        case DeviceAPIAdapter.Constant.MachinePrivilege.Administrator:
                        case DeviceAPIAdapter.Constant.MachinePrivilege.SupperAdministator:
                            userstruct.Privilege = (byte)14;
                            break;
                    }

                    //password
                    userstruct.Password = System.Text.ASCIIEncoding.Default.GetBytes(employee.PASSWORD);

                    //Name
                    userstruct.Name = System.Text.ASCIIEncoding.Default.GetBytes(employee.NAME);


                    UserDataStructlist.Add(userstruct);
                    #endregion

                    #region collect tempter
                    TemplateDataStruct tempterstruct = new TemplateDataStruct();


                    FingerTemplateBusiness ftbusiness = new FingerTemplateBusiness();
                    List<FINGER_TEMPLATE> fpList = ftbusiness.GetList();

                    List<FINGER_TEMPLATE> finger_templates = fpList.FindAll(delegate(FINGER_TEMPLATE f) { return f.EMPLOYEE_ID == int.Parse(ur.EMPLOYEE_NUMBER); });
                    List<TemplateDataStruct> tempterstructs = new List<TemplateDataStruct>();
                    foreach (FINGER_TEMPLATE finger_template in finger_templates)
                    {
                        tempterstruct.PIN = userstruct.PIN;
                        tempterstruct.FingerID = (byte)finger_template.FINGER_ID;
                        tempterstruct.Valid = (byte)1;
                        tempterstruct.Template = finger_template.TEMPLATE;
                        tempterstruct.TemplateSize = (ushort)finger_template.TEMPLATE.Length;
                        tempterstructs.Add(tempterstruct);
                    }
                    #endregion
                }

                USB_UserData.WriteToUSB(UserDataStructlist);
                USB_TemplateData.WriteToUSB(tempterstructs);

            }
        }

//USB_TemplateData.cs
        public static bool WriteToUSB(List<TemplateDataStruct> list)
        {
            try
            {
                int size = 608;
                //Find usb driver
                filename = string.Empty;
                foreach (System.IO.DriveInfo di in System.IO.DriveInfo.GetDrives())
                {
                    if (di.DriveType == DriveType.Removable && di.IsReady)
                    {
                        filename = di.RootDirectory.FullName + "template.dat";
                        if (System.IO.File.Exists(filename))
                            System.IO.File.Delete(filename);
                        break;
                    }
                }

                if (filename.Length > 0)
                {
                    using (FileStream fs = File.Open(filename, FileMode.Open))
                    {
                        System.IO.BinaryWriter br = new System.IO.BinaryWriter(fs);
                        foreach (TemplateDataStruct tds in list)
                        {
                            IntPtr ptr = Marshal.AllocHGlobal(size);
                            Marshal.StructureToPtr(tds, ptr, true);
                            byte[] b = new byte[size];
                            Marshal.Copy(ptr, b, 0, size);
                            bw.Write(b);
                        }
                        br.Close();
                    }
                    return true;
                }
                return false;
            }
            catch
            {
                return false;
            }

        }


//USB_UserData.cs
        public static bool WriteToUSB(List<UserDataStruct> list)
        {
            try
            {
                int size = 72;
                //Find usb driver
                filename = string.Empty;
                foreach (System.IO.DriveInfo di in System.IO.DriveInfo.GetDrives())
                {
                    if (di.DriveType == DriveType.Removable && di.IsReady)
                    {
                        filename = di.RootDirectory.FullName + "user.dat";
                        if (System.IO.File.Exists(filename))
                            System.IO.File.Delete(filename);
                        break;
                    }
                }

                if (filename.Length > 0)
                {
                    using (FileStream fs = File.Open(filename, FileMode.CreateNew))
                    {
                        System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs);
                        foreach (UserDataStruct uds in list)
                        {
                            IntPtr ptr = Marshal.AllocHGlobal(size);
                            Marshal.StructureToPtr(uds, ptr, true);
                            byte[] b = new byte[size];
                            Marshal.Copy(ptr, b, 0, size);
                            bw.Write(b);
                        }
                        br.Close();
                    }
                    return true;
                }
                return false;
            }
            catch
            {
                return false;
            }

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值