/// <summary> /// バックアップ起動 /// </summary> public void Start() { string serverFolderPath = @"\\" + _ipaddress + @"\" + _rootdirectory.TrimStart('\\'); try { //接続テスト bool result = true; int connectTime = 0; while (result) { int status = NetworkConnection.Connect(serverFolderPath, _localpath, _loginuser, _loginpassword); if (status == (int)ERROR_ID.ERROR_SUCCESS) { result = false; connectTime = 0; //copy if (_copyinit == 0) { CopyDirectory _Info = new CopyDirectory(_localpath, _copydir); _Info.MyCopyEnd += new CopyDirectory.CopyEnd(_Info_MyCopyEnd); _Info.StarCopy(); } if (InitWatcher()) { // Begin watching. fsw.EnableRaisingEvents = true; } } else { if (connectTime > 20) { NetworkConnection.Disconnect(_localpath); logger.Info("[" + _ipaddress + "]は接続できません"); result = false; } connectTime++; } } } catch (Exception ex) { logger.Error(ex.Message); } }
/// <summary> /// 变化处理 /// </summary> /// <param name="state"></param> private void OnWatchedFileChange(object state) { IMonitorServerFileService MonitorServerFileService = BLLFactory.ServiceAccess.CreateMonitorServerFileService(); IMonitorServerFolderService MonitorServerFolderService = BLLFactory.ServiceAccess.CreateMonitorServerFolderService(); // File Info SortedList htfilescopy = (SortedList)htfiles.Clone(); Mutex mutex = new Mutex(false, "FSW"); mutex.WaitOne(); mutex.ReleaseMutex(); foreach (DictionaryEntry file in htfilescopy) { try { FileSystemEventArgs fileevent = (FileSystemEventArgs)file.Value; //源路径 string filepath = System.IO.Path.GetFullPath(file.Key.ToString()); //备份路径 string backuppath = Path.Combine(_copydir, fileevent.Name); MonitorServerFile monitorServerFile = new MonitorServerFile(); MonitorServerFolder monitorServerFolder = new MonitorServerFolder(); // copy機能 if (fileevent.ChangeType.Equals(WatcherChangeTypes.Created)) { // Copy方法変更 2014/01/30 変更 //bool result = FileSystem.FileCopy(filepath, backuppath); CopyDirectory fileCopy = new CopyDirectory(filepath, backuppath); fileCopy.StarCopy(); //IO問題であれば、次のファイルを処理する if (fileCopy._Errorlist.Count > 0) { foreach (string errorMessage in fileCopy._Errorlist) { logger.Error(errorMessage); } continue; } //if (!result) //{ // continue; //} //判断是否是目录 if (Directory.Exists(filepath)) { monitorServerFile.monitorFileType = Path.GetExtension(backuppath); monitorServerFile.monitorFileSize = "0"; monitorServerFile.monitorFileStatus = 1; //--- monitorServerFolder.monitorServerID = _id; monitorServerFolder.monitorFileName = Path.GetFileName(fileevent.Name); monitorServerFolder.monitorFilePath = filepath.TrimEnd(("\\" + Path.GetFileName(fileevent.Name)).ToCharArray()); monitorServerFolder.monitorFileType = "99"; monitorServerFolder.initFlg = "0"; monitorServerFolder.monitorFlg = "0"; monitorServerFolder.creater = "admin"; monitorServerFolder.updater = "admin"; monitorServerFolder.createDate = CommonUtil.DateTimeNowToString(); monitorServerFolder.updateDate = CommonUtil.DateTimeNowToString(); } else { System.IO.FileInfo fileinfo = new System.IO.FileInfo(backuppath); monitorServerFile.monitorFileType = Path.GetExtension(backuppath); monitorServerFile.monitorFileSize = fileinfo.Length.ToString(); monitorServerFile.monitorFileStatus = 1; //--- monitorServerFolder.monitorServerID = _id; monitorServerFolder.monitorFileName = Path.GetFileName(fileevent.Name); monitorServerFolder.monitorFilePath = filepath.TrimEnd(("\\" + Path.GetFileName(fileevent.Name)).ToCharArray()); monitorServerFolder.monitorFileType = Path.GetExtension(backuppath); monitorServerFolder.initFlg = "0"; monitorServerFolder.monitorFlg = "1"; monitorServerFolder.creater = "admin"; monitorServerFolder.updater = "admin"; monitorServerFolder.createDate = CommonUtil.DateTimeNowToString(); monitorServerFolder.updateDate = CommonUtil.DateTimeNowToString(); } //新增文件默认为监视,添加check MonitorServerFolderService.InsertMonitorServerFolder(monitorServerFolder); } else if (fileevent.ChangeType.Equals(WatcherChangeTypes.Changed)) { System.IO.FileInfo fileinfo = new System.IO.FileInfo(backuppath); if (fileinfo.IsReadOnly) { continue; } fileinfo.IsReadOnly = true; // Copy方法変更 2014/01/30 変更 //bool result = FileSystem.FileCopy(filepath, backuppath); CopyDirectory fileCopy = new CopyDirectory(filepath, backuppath); fileCopy.StarCopy(); //IO問題であれば、次のファイルを処理する if (fileCopy._Errorlist.Count > 0) { foreach (string errorMessage in fileCopy._Errorlist) { logger.Error(errorMessage); } continue; } //if (!result) //{ // continue; //} //判断是否是目录 if (Directory.Exists(filepath)) { monitorServerFile.monitorFileType = Path.GetExtension(backuppath); monitorServerFile.monitorFileSize = "0"; monitorServerFile.monitorFileStatus = 2; } else { monitorServerFile.monitorFileType = Path.GetExtension(backuppath); monitorServerFile.monitorFileSize = fileinfo.Length.ToString(); monitorServerFile.monitorFileStatus = 2; } } else if (fileevent.ChangeType.Equals(WatcherChangeTypes.Deleted)) { //判断被删除的目录是否存在 if (Directory.Exists(backuppath)) { monitorServerFile.monitorFileType = Path.GetExtension(backuppath); monitorServerFile.monitorFileSize = "0"; bool result = FileSystem.FileDelete(backuppath); //如果出现IO冲突,去执行下一个 if (!result) { continue; } monitorServerFile.monitorFileStatus = 3; } //判断被删除的文件是否存在 else if (File.Exists(backuppath)) { System.IO.FileInfo fileinfo = new System.IO.FileInfo(backuppath); fileinfo.IsReadOnly = false; monitorServerFile.monitorFileType = Path.GetExtension(backuppath); monitorServerFile.monitorFileSize = fileinfo.Length.ToString(); bool result = FileSystem.FileDelete(backuppath); //如果出现IO冲突,去执行下一个 if (!result) { continue; } monitorServerFile.monitorFileStatus = 3; } else { // File Info Remove htfiles.Remove(file.Key); continue; } } else if (fileevent.ChangeType.Equals(WatcherChangeTypes.Renamed)) { RenamedEventArgs refileevent = (RenamedEventArgs)file.Value; string oldfilename = refileevent.OldName.ToString(); string olddir = Path.Combine(_copydir, oldfilename); if (Path.GetExtension(olddir) == string.Empty) { //old file dir info insert if (Directory.Exists(olddir)) { MonitorServerFile monitorServerFile1 = new MonitorServerFile(); monitorServerFile1.monitorServerID = _id; monitorServerFile1.monitorFileName = Path.GetFileName(oldfilename); monitorServerFile1.monitorFilePath = olddir; monitorServerFile1.monitorFileType = Path.GetExtension(olddir); monitorServerFile1.monitorFileSize = "0"; monitorServerFile1.monitorStartTime = CommonUtil.DateTimeNowToString(); monitorServerFile1.monitorFileStatus = 3; monitorServerFile1.transferFlg = 0; monitorServerFile1.deleteFlg = 0; monitorServerFile1.creater = "exe"; monitorServerFile1.createDate = CommonUtil.DateTimeNowToString(); monitorServerFile1.updater = "exe"; monitorServerFile1.updateDate = CommonUtil.DateTimeNowToString(); MonitorServerFileService.InsertMonitorServerFile(monitorServerFile1, filepath); bool result = FileSystem.FileDelete(olddir); //如果出现IO冲突,去执行下一个 if (!result) { continue; } } // Copy方法変更 2014/01/30 変更 //bool result1 = FileSystem.FileCopy(filepath, backuppath); CopyDirectory fileCopy = new CopyDirectory(filepath, backuppath); fileCopy.StarCopy(); //IO問題であれば、次のファイルを処理する if (fileCopy._Errorlist.Count > 0) { foreach (string errorMessage in fileCopy._Errorlist) { logger.Error(errorMessage); } continue; } //if (!result1) //{ // continue; //} //new file dir info insert monitorServerFile.monitorFileType = Path.GetExtension(backuppath); monitorServerFile.monitorFileSize = "0"; monitorServerFile.monitorFileStatus = 4; //--- monitorServerFolder.monitorServerID = _id; monitorServerFolder.monitorFileName = Path.GetFileName(fileevent.Name); monitorServerFolder.monitorFilePath = filepath.TrimEnd(("\\" + Path.GetFileName(fileevent.Name)).ToCharArray()); monitorServerFolder.monitorFileType = "99"; monitorServerFolder.initFlg = "0"; monitorServerFolder.monitorFlg = "0"; monitorServerFolder.creater = "admin"; monitorServerFolder.updater = "admin"; monitorServerFolder.createDate = CommonUtil.DateTimeNowToString(); monitorServerFolder.updateDate = CommonUtil.DateTimeNowToString(); } else { //old file info insert if (File.Exists(olddir)) { MonitorServerFile monitorServerFile1 = new MonitorServerFile(); monitorServerFile1.monitorServerID = _id; monitorServerFile1.monitorFileName = Path.GetFileName(oldfilename); monitorServerFile1.monitorFilePath = olddir; System.IO.FileInfo fileinfo1 = new System.IO.FileInfo(olddir); monitorServerFile1.monitorFileType = Path.GetExtension(olddir); monitorServerFile1.monitorFileSize = fileinfo1.Length.ToString(); monitorServerFile1.monitorStartTime = CommonUtil.DateTimeNowToString(); monitorServerFile1.monitorFileStatus = 3; monitorServerFile1.transferFlg = 0; monitorServerFile1.deleteFlg = 0; monitorServerFile1.creater = "exe"; monitorServerFile1.createDate = CommonUtil.DateTimeNowToString(); monitorServerFile1.updater = "exe"; monitorServerFile1.updateDate = CommonUtil.DateTimeNowToString(); MonitorServerFileService.InsertMonitorServerFile(monitorServerFile1, filepath); fileinfo1.IsReadOnly = false; bool result = FileSystem.FileDelete(olddir); //如果出现IO冲突,去执行下一个 if (!result) { continue; } } // Copy方法変更 2014/01/30 変更 //bool result1 = FileSystem.FileCopy(filepath, backuppath); CopyDirectory fileCopy = new CopyDirectory(filepath, backuppath); fileCopy.StarCopy(); //IO問題であれば、次のファイルを処理する if (fileCopy._Errorlist.Count > 0) { foreach (string errorMessage in fileCopy._Errorlist) { logger.Error(errorMessage); } continue; } //if (!result1) //{ // continue; //} //new file info insert System.IO.FileInfo fileinfo = new System.IO.FileInfo(backuppath); monitorServerFile.monitorFileType = Path.GetExtension(backuppath); monitorServerFile.monitorFileSize = fileinfo.Length.ToString(); monitorServerFile.monitorFileStatus = 4; //--- monitorServerFolder.monitorServerID = _id; monitorServerFolder.monitorFileName = Path.GetFileName(fileevent.Name); monitorServerFolder.monitorFilePath = filepath.TrimEnd(("\\" + Path.GetFileName(fileevent.Name)).ToCharArray()); monitorServerFolder.monitorFileType = Path.GetExtension(backuppath); monitorServerFolder.initFlg = "0"; monitorServerFolder.monitorFlg = "1"; monitorServerFolder.creater = "admin"; monitorServerFolder.updater = "admin"; monitorServerFolder.createDate = CommonUtil.DateTimeNowToString(); monitorServerFolder.updateDate = CommonUtil.DateTimeNowToString(); } //重命名后文件默认为监视,添加check MonitorServerFolderService.InsertMonitorServerFolder(monitorServerFolder); } //insert database monitorServerFile.monitorServerID = _id; monitorServerFile.monitorFileName = Path.GetFileName(fileevent.Name); monitorServerFile.monitorFilePath = backuppath; monitorServerFile.monitorStartTime = CommonUtil.DateTimeNowToString(); monitorServerFile.transferFlg = 0; monitorServerFile.deleteFlg = 0; monitorServerFile.creater = "exe"; monitorServerFile.createDate = CommonUtil.DateTimeNowToString(); monitorServerFile.updater = "exe"; monitorServerFile.updateDate = CommonUtil.DateTimeNowToString(); MonitorServerFileService.InsertMonitorServerFile(monitorServerFile, filepath); // File Info Remove htfiles.Remove(file.Key); } catch (Exception e) { logger.Error(e.Message); continue; } } }