NamingRuleHelper.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. using PaintDotNet.Base.SettingModel;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace PaintDotNet.Base.CommTool
  8. {
  9. /// <summary>
  10. /// 命名规则辅助工具类
  11. /// </summary>
  12. public static class NamingRuleHelper
  13. {
  14. private static ConfigModel configModel;
  15. private static string ruleName;
  16. private static string ruleGain;
  17. /// <summary>
  18. /// 按命名规则生成名字
  19. /// </summary>
  20. /// <param name="configModel"></param>
  21. /// <returns></returns>
  22. public static string GetNameFromXml(ConfigModel model, string ruleName,string ruleGain)
  23. {
  24. string nameStr = "";
  25. if (model != null)
  26. {
  27. configModel = model;
  28. if (!string.IsNullOrEmpty(configModel.NameFormat) && configModel.NameFormat.IndexOf('%') != -1)
  29. nameStr = SplitStringToRuleList();
  30. else
  31. nameStr = "pic" + GetContinueNum();
  32. }
  33. else
  34. nameStr = "pic" + GetContinueNum();
  35. NamingRuleHelper.ruleName = ruleName;
  36. NamingRuleHelper.ruleGain = ruleGain;
  37. return nameStr;
  38. }
  39. /// <summary>
  40. /// 将字符串拆分为规则格式的list
  41. /// </summary>
  42. /// <returns></returns>
  43. private static string SplitStringToRuleList()
  44. {
  45. List<int> indexList = new List<int>();
  46. int index = 0;
  47. foreach (char c in configModel.NameFormat)
  48. {
  49. if (c.Equals('%'))
  50. indexList.Add(index);
  51. index++;
  52. }
  53. if (indexList.Count > 0)
  54. {
  55. List<string> ruleList = new List<string>();
  56. for (int i = 0; i < indexList.Count; i++)
  57. {
  58. if (i == indexList.Count - 1)
  59. ruleList.Add(configModel.NameFormat.Substring(indexList[i]));
  60. else
  61. ruleList.Add(configModel.NameFormat.Substring(indexList[i], indexList[i + 1] - indexList[i]));
  62. }
  63. return JointToName(ruleList);
  64. }
  65. else
  66. return "pic" + GetContinueNum();
  67. }
  68. /// <summary>
  69. /// 拼接出符合规则的
  70. /// </summary>
  71. /// <returns></returns>
  72. private static string JointToName(List<string> ruleList)
  73. {
  74. if(ruleList.Count > 0)
  75. {
  76. //ConfigModel config =
  77. string nameStr = "";
  78. foreach(string str in ruleList)
  79. {
  80. switch (str)
  81. {
  82. case "%P":
  83. if (!string.IsNullOrEmpty(configModel.NamePrefix))
  84. nameStr += configModel.NamePrefix;
  85. break;
  86. case "%I":
  87. nameStr += GetContinueNum();
  88. break;
  89. case "%h":
  90. nameStr += DateTime.Now.ToString("HH");
  91. break;
  92. case "%m":
  93. nameStr += DateTime.Now.ToString("mm");
  94. break;
  95. case "%s":
  96. nameStr += DateTime.Now.ToString("ss");
  97. break;
  98. case "%Y":
  99. nameStr += DateTime.Now.ToString("yyyy");
  100. break;
  101. case "%M":
  102. nameStr += DateTime.Now.ToString("MM");
  103. break;
  104. case "%D":
  105. nameStr += DateTime.Now.ToString("dd");
  106. break;
  107. case "%G":
  108. nameStr += Guid.NewGuid().ToString();
  109. break;
  110. case "%U":
  111. nameStr += Environment.UserName;
  112. break;
  113. case "%N":
  114. nameStr += ruleName;
  115. break;
  116. case "%E":
  117. nameStr += ruleGain;
  118. break;
  119. case "%T1":
  120. nameStr += configModel.Txt1;
  121. break;
  122. case "%T2":
  123. nameStr += configModel.Txt2;
  124. break;
  125. case "%T3":
  126. nameStr += configModel.Txt3;
  127. break;
  128. case "%Z1":
  129. nameStr += configModel.CharZ1;
  130. break;
  131. case "%Z2":
  132. nameStr += configModel.CharZ2;
  133. break;
  134. }
  135. }
  136. return nameStr;
  137. }
  138. else
  139. return "pic" + GetContinueNum();
  140. }
  141. /// <summary>
  142. /// 获取并格式化延续数值
  143. /// </summary>
  144. /// <returns></returns>
  145. private static string GetContinueNum()
  146. {
  147. string continueNum = configModel.ContinueNum.ToString();
  148. if (configModel.NumberNum > continueNum.Length)
  149. return continueNum.PadLeft(configModel.NumberNum, '0');
  150. else
  151. return continueNum;
  152. }
  153. }
  154. }