private static string GetBackupLogFileName(XWXFileSystemWatcher watcher) { //为每个监视独立建立一个日志。日志名称格式为:log__监视路径__.txt,例如:log__c_folder1_folder2__.txt 代表监视"c:\folder1\folder2"的日志 string logFileId = watcher.Path.Replace(":\\", "_").Replace("\\", "_"); return(GetOrCreateLogFilePath() + "\\log__" + logFileId + "__.txt"); }
public static void Backup(XWXFileSystemWatcher watcher, RenamedEventArgs e, IRecord recorder) { try { FileAttributes attrs = File.GetAttributes(e.FullPath); //判断改路径是一个文件还是一个目录 bool isFolder = ((attrs & FileAttributes.Directory) == FileAttributes.Directory); //如果是一个目录,则在备份目录中创建一个同名目录 if (isFolder) { string backupDir = watcher.BackupFolder + "\\" + e.Name; //如果备份文件夹中不存在该目录,则创建之 if (!Directory.Exists(backupDir)) { Directory.CreateDirectory(backupDir); } } else//如果是一个文件,则备份文件 { string destFileName = watcher.BackupFolder + "\\" + e.Name; //备份文件的后缀(格式为:".yyyy_MM_dd_HH_mm_ss.changedType",例如:2013_02_28_14_12_32.created) string extendName = DateTime.Now.ToString("@yyyy_MM_dd_HH_mm_ss") + "." + System.Enum.GetName(e.ChangeType.GetType(), e.ChangeType); string backupFileName = destFileName + extendName; //检查文件是否已经存在,存在则不进行操作 if (File.Exists(backupFileName)) { return; } try { //将文件复制到备份目录进行备份,并记录入日志 FileHelper.SaveCopy(e.FullPath, backupFileName, false); if (recorder != null) { recorder.Record(watcher, e); } Logger.LogBackup(watcher, DateTime.Now, Enum.GetName(e.ChangeType.GetType(), e.ChangeType), "成功", e.FullPath, backupFileName, string.Empty); } catch (Exception ex) { //如果发生IO异常,则记录日志,以便追踪 Logger.LogBackup(watcher, DateTime.Now, Enum.GetName(typeof(WatcherChangeTypes), e.ChangeType), "失败", e.FullPath, backupFileName, ex.Message); } } } catch (Exception ex) { Logger.LogBackup(watcher, DateTime.Now, Enum.GetName(typeof(WatcherChangeTypes), e.ChangeType), "失败", e.FullPath, "", ex.Message); } }
/// <summary> /// 对备份操作进行日志记录 /// </summary> /// <param name="date">备份的时间</param> /// <param name="action">引起备份的动作</param> /// <param name="backupResult">备份执行结果</param> /// <param name="sourceFile">源文件</param> /// <param name="destFile">目标文件</param> /// <param name="remark">备注</param> public static void LogBackup(XWXFileSystemWatcher watcher, DateTime date, string action, string backupResult, string sourceFile, string destFile, string remark) { string logFolder = GetOrCreateLogFilePath(); string logFile = GetBackupLogFileName(watcher); string logString = string.Format("【备份时间:{0} 动作:{1} 执行结果:{2} 源:\"{3}\" 目标:\"{4}\" 备注:{5} 】\r\n\r\n", date.ToString("yyyy-MM-dd HH:mm:ss"), action, backupResult, sourceFile, destFile, remark ); FileInfo file = new FileInfo(logFile); FileStream fs = file.Open(FileMode.Append, FileAccess.Write); byte[] bytes = Encoding.UTF8.GetBytes(logString); fs.Write(bytes, 0, bytes.Length); fs.Flush(); fs.Close(); fs.Dispose(); }