Esempio n. 1
0
        /// <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);
            }
        }
Esempio n. 2
0
        /// <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;
                }
            }
        }