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