/// <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)); } }