//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;
}
}