using System; using System.Collections.Generic; using System.Data; using System.Globalization; using QMAPP.FJC.Entity.Basic; using QMAPP.FJC.BLL.Basic; using QMAPP.FJC.Entity.FileCopy; using QMAPP.FJC.BLL.FileCopy; using System.Net.NetworkInformation; namespace AutoFileCopyNet { /// /// 模块编号:AutoFileCopyNet.AutoFileCopy /// 作 用:根据设备信息,从设备共享目录复制文件 /// 作 者:pxbibm /// 编写日期:2013-08-28 public static class AutoFileCopy { /// /// 实现从共享目录复制文件 /// /// 设备类型 /// 文件存储目录 /// 本地映射驱动名称 /// 网络用户 /// 密码 /// 最近读写时间,根据此条件搜索该修改时间大于该时间的文件 /// 文件从命名的前缀 /// 错误消息头 public static void AutoFileCopyFromEquipmentByType(MachineInfo info, string equipmentType, string server_ip, string toDir, string localDriverPath, string fileRenamePrefix, string errorMessageHead,string conn_way) { try { #region "循环从设备复制文件" String localDir = String.Empty; String remotePath = String.Empty; int status = -1; localDir = toDir + "\\" + equipmentType + "\\" + info.MACHINECODDE + "\\";//本地存储路径 remotePath = info.EQUIPMENT_DIRECTORY;//文件所在目录 string connectIp = "\\\\" + server_ip + "\\" + remotePath; if (string.IsNullOrEmpty(server_ip)) { connectIp = info.IPADDRESS + remotePath;//设备IP } //判断连接方式 if ("0".Equals(conn_way))//打开即时断开 { if (System.IO.Directory.Exists(localDriverPath)) { WNet.Disconnect(localDriverPath); } } if (!System.IO.Directory.Exists(localDriverPath)) { status = WNetConnect(connectIp, localDriverPath, info.USERNAME, info.PASSWORD); } else { status = (int)ERROR_ID.ERROR_SUCCESS; } if (status == (int)ERROR_ID.ERROR_SUCCESS) { if (info.EQUIPMENT_TYPE_CODE.ToString() == equipmentType) { DirHandler.CopyDir(localDriverPath , localDir, info.MACHINECODDE, info.EQUIPMENT_TYPE_CODE, info.PID); } } else { LogFileAccess.WriteLogFile("网络创建网络连接失败" + "---" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } #endregion } catch (Exception ee) { LogFileAccess.WriteLogFile("网络创建连接复制文件抓取失败" + ee.Message + ee.Source + "---" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } finally { if ("0".Equals(conn_way))//打开即时断开 { WNet.Disconnect(localDriverPath); } } } /// /// 实现从共享目录复制文件 /// /// 设备类型 /// 文件存储目录 /// 本地映射驱动名称 /// 网络用户 /// 密码 public static void AutoFileCopyFromEquipmentByType(MachineInfo info, string equipmentType, string server_ip, string toDir, string localDriverPath, string conn_way) { FTPHelper ftpHelper = new FTPHelper(info.IPADDRESS, info.EQUIPMENT_DIRECTORY, info.USERNAME, info.PASSWORD); string toPath = toDir + "\\" + equipmentType + "\\" + info.MACHINECODDE + "\\"; List list = ftpHelper.GetLoadListFiles(toPath);//本地存储路径); LogFileAccess.WriteLogFile("海天数据文件复制:" + list.Count+"-----------" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); if (list.Count > 0) { DirHandler.UpdateDir(list, toPath, info.MACHINECODDE, info.EQUIPMENT_TYPE_CODE, info.PID); } } /// /// 连接共享网络 /// /// 远程共享网络路径 /// 本地网络路径 /// 远程共享网络IP /// 用户名 /// 密码 /// private static int WNetConnect(string remotePath, string localDriverPath, string netUser, string userPwd) { int connci = 0; int status = -1; string conn_frequency = GetConfigurationSettings.conn_frequency; if (!string.IsNullOrEmpty(conn_frequency) && conn_frequency == "UNLIMIT") { while (status != (int)ERROR_ID.ERROR_SUCCESS) { status = WNet.Connect(remotePath, localDriverPath, netUser, userPwd); } } else { int limitcount = 10; if (!string.IsNullOrEmpty(conn_frequency)) { limitcount = int.Parse(conn_frequency); } while (status != (int)ERROR_ID.ERROR_SUCCESS && connci < limitcount) { connci++; status = WNet.Connect(remotePath, localDriverPath, netUser, userPwd); } } return status; } /// /// 实现从共享目录,搜索某目录,并复制该目录下的文件 /// /// 设备类型 /// 文件存储目录 /// 本地映射驱动名称 /// 网络用户 /// 密码 /// 搜索目录的关键字 /// 搜索参数,只搜索顶层目录或所有目录 /// 文件从命名的前缀 /// 错误消息头 public static void AutoDirCopyFromEquipmentByType(String equipmentType,string equipment_ip, String toDir, String localDriverPath, String netUser, String userPwd, String keyWords, System.IO.SearchOption searchOption, String fileRenamePrefix, String errorMessageHead) { try { MachineInfoBLL bllMachine = new MachineInfoBLL(); FileCopyRecordBLL bll = new FileCopyRecordBLL(); FileCopyRecord record = new FileCopyRecord(); //从数据库读取设备信息 List list = bllMachine.GetAllList(new MachineInfo { PROCESSTYPE = equipmentType, IPADDRESS = equipment_ip }); #region "循环从设备复制文件" if (list.Count > 0) { String localDir = String.Empty; String remotePath = String.Empty; int status = -1; foreach (MachineInfo eq in list) { localDir = toDir + eq.MACHINECODDE; remotePath = "";//目录 if (status != (int)ERROR_ID.ERROR_SUCCESS) { status = WNetConnect(remotePath, localDriverPath, netUser, userPwd); //LogFileAccess.WriteLogFile(eq.EQUIPMENT_IP+"激光切数据文件拷贝复制文件服务...网络连接状态" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", DateTimeFormatInfo.InvariantInfo) + "...|" + status); } if (status == (int)ERROR_ID.ERROR_SUCCESS) { if (eq.PROCESSTYPE == equipmentType) { DirHandler.CopyDir(remotePath, localDir, keyWords, System.IO.SearchOption.TopDirectoryOnly, fileRenamePrefix, eq.MACHINECODDE, eq.PROCESSTYPE, localDir, eq.PID); } } } } #endregion } catch (Exception ex) { LogFileAccess.WriteLogFile("网络共享文件抓取失败" + ex.Message + ex.Source + "---" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } finally { WNet.Disconnect(localDriverPath); } } /// /// 实现从共享目录删除 /// /// 设备类型 /// 文件存储目录 /// 本地映射驱动名称 /// 网络用户 /// 密码 /// 最近读写时间,根据此条件搜索该修改时间大于该时间的文件 /// 文件从命名的前缀 /// 错误消息头 public static void AutoFileDelete(MachineInfo info, string server_ip, string localDriverPath, string fileRenamePrefix, string errorMessageHead, string conn_way ,string delDay,string startTime,string endTime,string delTime,string fileBakPath) { try { #region "循环从设备复制文件" String localDir = String.Empty; String remotePath = String.Empty; int status = -1; remotePath = info.EQUIPMENT_DIRECTORY;//文件所在目录 string connectIp = server_ip + "\\" + remotePath; if (string.IsNullOrEmpty(server_ip)) { connectIp = info.IPADDRESS + "\\" + remotePath;//设备IP } //判断连接方式 if ("0".Equals(conn_way))//打开即时断开 { if (System.IO.Directory.Exists(localDriverPath)) { WNet.Disconnect(localDriverPath); } } if (!System.IO.Directory.Exists(localDriverPath)) { status = WNetConnect("\\\\" + connectIp, localDriverPath, info.USERNAME, info.PASSWORD); } else { status = (int)ERROR_ID.ERROR_SUCCESS; } if (status == (int)ERROR_ID.ERROR_SUCCESS) { //判断是否需要删除文件 if (DateTime.Now.DayOfWeek.ToString("D").Equals(delDay) && DateTime.Now.Hour >= Convert.ToInt32(startTime) && DateTime.Now.Hour <= Convert.ToInt32(endTime)) { int time = 0; while (!AutoFileCopy.Delete_file(localDriverPath + "\\", fileBakPath)) { time++; if (time >= Convert.ToInt32(delTime)) { break; } } } } else { LogFileAccess.WriteLogFile("网络创建网络连接失败" + "---" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } #endregion } catch (Exception ee) { LogFileAccess.WriteLogFile("网络创建连接复制文件抓取失败" + ee.Message + ee.Source + "---" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } finally { if ("0".Equals(conn_way))//打开即时断开 { WNet.Disconnect(localDriverPath); } } } /// /// 判断IP是否联通 /// /// /// public static bool Check_PingIp(string ip) { Ping ping = new Ping(); PingReply pr = ping.Send(ip,1000); if (pr.Status == IPStatus.Success) return true; else return false; //Ping ping = new Ping(); //PingOptions poptions = new PingOptions(); //poptions.DontFragment = true; //string data = string.Empty; //byte[] buffer =System.Text. Encoding.ASCII.GetBytes(data); //int timeout = 1200; //PingReply reply = ping.Send(System.Net.IPAddress.Parse(ip),timeout,buffer,poptions); //if (reply.Status == IPStatus.Success) // return true; //else // return false; } /// /// 删除文件 /// /// /// public static bool Delete_file(string directoryPath,string fileBakPath) { bool b = false; if (!System.IO.Directory.Exists(fileBakPath)) { System.IO.Directory.CreateDirectory(fileBakPath); } if (System.IO.Directory.GetFiles(directoryPath).Length > 0) { foreach (string var in System.IO.Directory.GetFiles(directoryPath)) { System.IO.FileInfo file = new System.IO.FileInfo(var); try { file.MoveTo(fileBakPath + "\\" + file.Name.ToLower().Replace(".csv", "_"+DateTime.Now.ToString("yyyyMMddHHmm")) +".csv"); b = true; LogFileAccess.WriteLogFile("文件" + file.Name + "备份成功" + "---" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } catch (Exception) { b = false; LogFileAccess.WriteLogFile("文件" + file.Name + "删除失败" + "---" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } } } return b; } } }