/// <summary>
        /// 分析Rar文件,并将Config解析为Rule与时间参数
        /// </summary>
        /// <param name="theRarFile">rar文件的地址</param>
        /// <param name="fromDay">开始时间</param>
        /// <param name="toDay">结合时间</param>
        /// <param name="directory">解压缩的文件夹</param>
        /// <param name="needClean">分析结束是否需要清理解压缩的文件夹</param>
        /// <param name="remainRarFile">分析结束是否需要保留Rar文件</param>
        /// <returns>迁移规则</returns>
        public static TransferRule AnalyseRarData(string theRarFile, out DateTime?fromDay, out DateTime?toDay, string directory, bool needClean, bool remainRarFile)
        {
            //解压缩
            CommandRunner.AssertIsRarFile(theRarFile);
            CommandRunner.UnRarFileToDirectory(theRarFile, DiskOperations.CorrectDirectory(directory), true);

            //分析config文件
            string ruleString;
            Dictionary <string, string> theRuleStrings = new Dictionary <string, string>();

            theRuleStrings.Add(ReadConfig(DiskOperations.CorrectDirectory(directory), out ruleString, out fromDay, out toDay), ruleString);
            List <TransferRule> allTransferRule = RuleConverter.Convert(theRuleStrings);

            if (allTransferRule.Count != 1)
            {
                throw new ApplicationException(Utility._Error_AnalyseRarData_Error);
            }

            if (needClean)
            {
                CommandRunner.CleanUpDirectory(DiskOperations.CorrectDirectory(directory));
            }
            if (!remainRarFile)
            {
                CommandRunner.DeleteFile(theRarFile);
            }

            return(allTransferRule[0]);
        }
        /// <summary>
        /// 读取Config,获取相应的规则字符串与调用参数
        /// </summary>
        /// <param name="directoryWithConfigFile">默认配置存放的文件夹,里面应该存有默认的配置文件,入config.txt</param>
        /// <param name="ruleString">规则字符串</param>
        /// <param name="startTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <returns>规则名字</returns>
        public static string ReadConfig(string directoryWithConfigFile, out string ruleString, out DateTime?startTime, out DateTime?endTime)
        {
            //读取所有配置字符串
            string        fullConfigName     = DiskOperations.CorrectDirectory(directoryWithConfigFile) + _DefaultConfigName;
            List <string> readConfigs        = DiskOperations.ReadLinesFromFile(fullConfigName);
            string        theRuleNameString  = FindLineContainsKey(readConfigs, _TransferRuleNameKey);
            string        theRuleString      = FindLineContainsKey(readConfigs, _TransferRuleKey);
            string        theParameterString = FindLineContainsKey(readConfigs, _TransderParameterKey);

            //配对出参数,迁移名字以及迁移字符串
            GetParameter(theParameterString, out startTime, out endTime);
            ruleString = theRuleString.Replace(_TransferRuleKey, string.Empty);
            return(theRuleNameString.Replace(_TransferRuleNameKey, string.Empty));
        }
        /// <summary>
        /// 拷贝文件至文件夹
        /// </summary>
        public static void CopyToDirectory(string fromFile, string toDirectory)
        {
            if (!File.Exists(fromFile))
            {
                throw new ApplicationException(string.Format("{0}{1}", Utility._Error_File_NotExist, fromFile));
            }
            string fileName   = fromFile.Substring(fromFile.LastIndexOf(@"\") + 1);
            string targetFile = string.Format("{0}{1}", DiskOperations.CorrectDirectory(toDirectory), fileName);

            if (File.Exists(targetFile))
            {
                throw new ApplicationException(string.Format("{0}{1}", Utility._Error_File_Exist, targetFile));
            }
            Copy(fromFile, toDirectory);
        }
        /// <summary>
        /// 清空文件夹,删除文件夹下所有文件(不递归)
        /// </summary>
        public static void CleanUpDirectory(string directory)
        {
            string theRightDirectory = DiskOperations.CorrectDirectory(directory);
            string command           = string.Format("/c del \"{0}*\" /q", theRightDirectory);

            bool reslut;

            try
            {
                reslut = Run("cmd.exe", command, 20);
            }
            catch (Exception e)
            {
                throw new ApplicationException(string.Format("{0}{1},原因是:{2}", Utility._Error_CleanDirectory_Failed, theRightDirectory, e.Message));
            }
            if (!reslut)
            {
                throw new ApplicationException(string.Format("{0}{1},原因是:超时(20秒内无响应)", Utility._Error_CleanDirectory_Failed, theRightDirectory));
            }
        }