public FrmFilePicker(XWXFileSystemWatcher watcher) { InitializeComponent(); Init(); _watcher = watcher; txbBackupFolder.Text = watcher.BackupFolder; }
//进行恢复 private void Rebackup(object sender, EventArgs e) { XWXFileSystemWatcher watcher = GetSelectedWatcher(true, "请选择需要进行恢复的监视项"); if (watcher != null) { new FrmFilePicker(watcher).Show(); } }
//打开备份目录 private void OpenBackupFolder(object sender, EventArgs e) { XWXFileSystemWatcher watcher = GetSelectedWatcher(true, "请选择监视项"); if (watcher != null) { System.Diagnostics.Process.Start(watcher.BackupFolder); } }
//点击包含子目录 private void dgrdTaskList_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0 && e.ColumnIndex == IDX_SUBDIR) { DataGridView dgv = sender as DataGridView; DataGridViewRow row = dgv.Rows[e.RowIndex]; XWXFileSystemWatcher watcher = row.Tag as XWXFileSystemWatcher; watcher.IncludeSubdirectories = (bool)row.Cells[IDX_SUBDIR].EditedFormattedValue; //当改变一个监视的"是否包含子目录"后触发OnWatchSettingChanged事件以便进行实时保存 this.OnWatchSettingChanged(); } }
//停止一个监视 private void StopWatch(object sender, EventArgs e) { XWXFileSystemWatcher watcher = GetSelectedWatcher(true, "请选择需要停止的监视项"); if (watcher != null) { watcher.StopWatch(); //一旦停止监视,就将监视动作列表冻结,以免在停止监视时改变了监视动作。 dgrdTaskList.SelectedRows[0].Cells[IDX_CHANGETYPE].ReadOnly = true; dgrdTaskList.SelectedRows[0].Cells[IDX_SUBDIR].ReadOnly = true; //当停止一个监视后触发OnWatchSettingChanged事件以便进行实时保存 this.OnWatchSettingChanged(); } }
//开始一个监视 public void StartWatch(object sender, EventArgs e) { XWXFileSystemWatcher watcher = GetSelectedWatcher(true, "请选择需要开始的监视项"); if (watcher != null) { watcher.StartWatch(); //开始监视后,将监视动作设置为可编辑 dgrdTaskList.SelectedRows[0].Cells[IDX_CHANGETYPE].ReadOnly = false; dgrdTaskList.SelectedRows[0].Cells[IDX_SUBDIR].ReadOnly = false; //当开始一个监视后触发OnWatchSettingChanged事件以便进行实时保存 this.OnWatchSettingChanged(); } }
//当监视状态发送变化 void watcher_OnWatchStatusChanged(object sender, WatchStatusChangedEventArgs e) { XWXFileSystemWatcher watcher = sender as XWXFileSystemWatcher; foreach (DataGridViewRow row in dgrdTaskList.Rows) { if (((XWXFileSystemWatcher)row.Tag) == watcher) { //改变列表上该监视的状态文字 row.Cells[IDX_STATUS].Value = GetWatchingStatusName(e.IsWatching); break; } } }
//选择需要监视的动作 void cb_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cb = sender as ComboBox; if (_selectedRowIndex > -1) { XWXFileSystemWatcher watcher = (XWXFileSystemWatcher)dgrdTaskList.Rows[_selectedRowIndex].Tag; string selectedAction = cb.SelectedItem.ToString(); switch (selectedAction) { //需要先解除原来的事件绑定,在绑定新的,否则会触发多次。 case "创建、修改及重命名": watcher.Created -= new FileSystemEventHandler(watcher_Created); watcher.Changed -= new FileSystemEventHandler(watcher_Changed); watcher.Renamed -= new RenamedEventHandler(watcher_Renamed); watcher.Created += new FileSystemEventHandler(watcher_Created); watcher.Changed += new FileSystemEventHandler(watcher_Changed); watcher.Renamed += new RenamedEventHandler(watcher_Renamed); watcher.WatchingChangeTypes = (WatcherChangeTypes.Changed | WatcherChangeTypes.Created); break; case "仅创建": watcher.Created -= new FileSystemEventHandler(watcher_Created); watcher.Changed -= new FileSystemEventHandler(watcher_Changed); watcher.Created += new FileSystemEventHandler(watcher_Created); watcher.Renamed -= new RenamedEventHandler(watcher_Renamed); watcher.WatchingChangeTypes = WatcherChangeTypes.Created; break; case "仅修改": watcher.Created -= new FileSystemEventHandler(watcher_Created); watcher.Changed -= new FileSystemEventHandler(watcher_Changed); watcher.Renamed -= new RenamedEventHandler(watcher_Renamed); watcher.Changed += new FileSystemEventHandler(watcher_Changed); watcher.WatchingChangeTypes = WatcherChangeTypes.Changed; break; case "仅重命名": watcher.Created -= new FileSystemEventHandler(watcher_Created); watcher.Changed -= new FileSystemEventHandler(watcher_Changed); watcher.Renamed -= new RenamedEventHandler(watcher_Renamed); watcher.Renamed += new RenamedEventHandler(watcher_Renamed); watcher.WatchingChangeTypes = WatcherChangeTypes.Changed; break; } //当选择一个监视的更改类型后触发OnWatchSettingChanged事件以便进行实时保存 this.OnWatchSettingChanged(); } }
//移除一个监视 private void RemoveWatch(object sender, EventArgs e) { XWXFileSystemWatcher watcher = GetSelectedWatcher(true, "请选择需要移除的监视项"); if (watcher != null) { if (MessageBox.Show("删除该监视后不再会自动备份该目录文件,确定吗?", "正在删除监视", MessageBoxButtons.OKCancel) == DialogResult.OK) { watcher.StopWatch(); watcherList.Remove(watcher); dgrdTaskList.Rows.Remove(dgrdTaskList.SelectedRows[0]); //当删除一个监视后触发OnWatchSettingChanged事件以便进行实时保存 this.OnWatchSettingChanged(); } } }
void watcher_Renamed(object sender, RenamedEventArgs e) { XWXFileSystemWatcher watcher = sender as XWXFileSystemWatcher; BackupHelper.Backup(watcher, e, recorder); }
//从一个WatchInfo载入一个监视项到界面中,并重现该WatchInfo的信息 private void AddWatchItem(WatchInfo watch) { XWXFileSystemWatcher watcher = new XWXFileSystemWatcher(watch.WatchedFolder); watcher.BackupFolder = watch.BackupFolder; watcher.NotifyFilter = NotifyFilters.Security | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size | NotifyFilters.Attributes | NotifyFilters.CreationTime; watcher.OnWatchStatusChanged += new WatchStatusChangedHandler(watcher_OnWatchStatusChanged); //目前版本不监视删除和重命名操作 //watcher.Deleted += new FileSystemEventHandler(watcher_Deleted); //watcher.Renamed += new RenamedEventHandler(watcher_Renamed); if ((watch.ChangeTypes & WatcherChangeTypes.Renamed) == WatcherChangeTypes.Renamed) { watcher.Renamed += new RenamedEventHandler(watcher_Renamed); watcher.WatchingChangeTypes = (watcher.WatchingChangeTypes | WatcherChangeTypes.Renamed); } if ((watch.ChangeTypes & WatcherChangeTypes.Created) == WatcherChangeTypes.Created) { watcher.Created += new FileSystemEventHandler(watcher_Created); watcher.WatchingChangeTypes = (watcher.WatchingChangeTypes | WatcherChangeTypes.Created); } if ((watch.ChangeTypes & WatcherChangeTypes.Changed) == WatcherChangeTypes.Changed) { watcher.Changed += new FileSystemEventHandler(watcher_Changed); watcher.WatchingChangeTypes = (watcher.WatchingChangeTypes | WatcherChangeTypes.Changed); } int rowIndex = dgrdTaskList.Rows.Add(); dgrdTaskList.Rows[rowIndex].Cells[IDX_WATCHINGDIR].Value = watcher.Path; dgrdTaskList.Rows[rowIndex].Cells[IDX_BACKUPDIR].Value = watcher.BackupFolder; dgrdTaskList.Rows[rowIndex].Cells[IDX_STATUS].Value = GetWatchingStatusName(watcher.EnableRaisingEvents); dgrdTaskList.Rows[rowIndex].Tag = watcher; DataGridViewComboBoxCell cell = dgrdTaskList[IDX_CHANGETYPE, rowIndex] as DataGridViewComboBoxCell; cell.Items.Add("创建、修改及重命名"); cell.Items.Add("仅创建"); cell.Items.Add("仅修改"); cell.Items.Add("仅重命名"); if (watch.ChangeTypes == WatcherChangeTypes.Changed) { cell.Value = "仅修改"; } else if (watch.ChangeTypes == WatcherChangeTypes.Created) { cell.Value = "仅创建"; } else if (watch.ChangeTypes == WatcherChangeTypes.Renamed) { cell.Value = "仅重命名"; } else { cell.Value = "创建、修改及重命名"; } cell.ReadOnly = !watch.Enable; DataGridViewCheckBoxCell checkbox = dgrdTaskList.Rows[rowIndex].Cells[IDX_SUBDIR] as DataGridViewCheckBoxCell; if (checkbox != null) { checkbox.Value = watch.IncludeSubdirectories; } dgrdTaskList.Rows[rowIndex].Cells[IDX_SUBDIR].ReadOnly = !watch.Enable; if (watch.Enable) { watcher.StartWatch(); } else { watcher.StopWatch(); } //同时将该监视项添加到watcherList中 watcherList.Add(watcher); }