UnCompressForKs.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Text;
  5. using System.Linq;
  6. using DllEapEntity;
  7. namespace ZipFileHelper
  8. {
  9. /// <summary>
  10. /// 解压KS文件
  11. /// </summary>
  12. public class UnCompressForKs
  13. {
  14. public static List<FileSystemInfo> UnCompress(string rarpath,string filepath,string filename,string desdir,ref string errorinfo)
  15. {
  16. try
  17. {
  18. desdir += "\\" + filename;
  19. if (Directory.Exists(desdir))
  20. {
  21. Directory.Delete(desdir, true);//删除文件夹
  22. }
  23. Directory.CreateDirectory(desdir);//创建目录
  24. RarOperate rar = new RarOperate();
  25. UnCompressResults result = rar.unCompressRAR(rarpath,filepath, desdir, "", ref errorinfo);
  26. if (result != UnCompressResults.Success)
  27. {
  28. return null;
  29. }
  30. DirectoryInfo dir = new DirectoryInfo(desdir);
  31. FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录
  32. if (fileinfo.Length <= 0)
  33. {
  34. errorinfo = "未找到解压后的文件。";
  35. return null;
  36. }
  37. //继续解压
  38. result = rar.unCompressRAR(rarpath, fileinfo[0].FullName, desdir, "", ref errorinfo);
  39. if (result != UnCompressResults.Success)
  40. {
  41. return null;
  42. }
  43. fileinfo[0].Delete();//删除一级压缩文件
  44. fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录
  45. if (fileinfo.Length <= 0)
  46. {
  47. errorinfo = "未找到解压后的文件。";
  48. return null;
  49. }
  50. return fileinfo.ToList();
  51. }
  52. catch(Exception ex)
  53. {
  54. errorinfo = ex.Message.ToString();
  55. return null;
  56. }
  57. }
  58. public static Dictionary<string,string> GetParams(string rarpath, string filepath, string filename, string desdir, ref string errorinfo)
  59. {
  60. try
  61. {
  62. List<FileSystemInfo> files = UnCompress(rarpath, filepath, filename, desdir, ref errorinfo);
  63. if (files == null)
  64. return null;
  65. List<FileSystemInfo> prm = files.Where(t => t.Extension.ToLower() == ".prm").OrderBy(t => t.FullName).ToList();
  66. if (prm.Count <= 0)
  67. return null;
  68. //解析第一个文件
  69. List<string> filesdata = ReadFile(prm[0].FullName, ref errorinfo);
  70. //去掉前2行
  71. filesdata.Remove(filesdata[0]);
  72. filesdata.Remove(filesdata[0]);
  73. Dictionary<string, string> val = new Dictionary<string, string>();
  74. foreach(var item in filesdata)
  75. {
  76. GetValue(val, item);
  77. }
  78. return val;
  79. }
  80. catch(Exception ex)
  81. {
  82. errorinfo = ex.Message.ToString();
  83. return null;
  84. }
  85. }
  86. public static List<FileParams> GetParamsFor(string rarpath, string filepath, string filename, string desdir,int modelid, ref string errorinfo)
  87. {
  88. try
  89. {
  90. List<FileSystemInfo> files = UnCompress(rarpath, filepath, filename, desdir, ref errorinfo);
  91. if (files == null)
  92. return null;
  93. List<FileSystemInfo> prm = files.Where(t => t.Extension.ToLower() == ".prm").OrderBy(t => t.FullName).ToList();
  94. if (prm.Count <= 0)
  95. return null;
  96. //解析第一个文件
  97. List<string> filesdata = ReadFile(prm[0].FullName, ref errorinfo);
  98. //去掉前2行
  99. filesdata.Remove(filesdata[0]);
  100. filesdata.Remove(filesdata[0]);
  101. List<FileParams> val = new List<FileParams>();
  102. foreach (var item in filesdata)
  103. {
  104. GetValue(val, item,modelid);
  105. }
  106. return val;
  107. }
  108. catch (Exception ex)
  109. {
  110. errorinfo = ex.Message.ToString();
  111. return null;
  112. }
  113. }
  114. public static List<string> ReadFile(string filepath,ref string errorinfo)
  115. {
  116. try
  117. {
  118. //将文件读取到链表
  119. StreamReader sr = new StreamReader(filepath, System.Text.Encoding.UTF8);
  120. List<string> files = new List<string>();
  121. string tempstr = sr.ReadLine();
  122. while (tempstr != null)
  123. {
  124. if(tempstr.Contains("="))
  125. files.Add(tempstr);
  126. tempstr = sr.ReadLine();
  127. }
  128. sr.Close();
  129. return files;
  130. }
  131. catch(Exception ex)
  132. {
  133. errorinfo = ex.Message.ToString();
  134. return null;
  135. }
  136. }
  137. public static void GetValue(List<FileParams> dic, string val,int modelid)
  138. {
  139. string[] strs = val.Split('=');
  140. string keys = strs[0].Trim();
  141. strs = strs[1].Trim().Split(' ');
  142. string tempval = strs[0];
  143. FileParams temp = new FileParams();
  144. temp.FName = keys;
  145. temp.FVal = tempval;
  146. temp.ModelID = modelid;
  147. temp.ID = 0;
  148. dic.Add(temp);
  149. }
  150. public static void GetValue(Dictionary<string,string> dic,string val)
  151. {
  152. string[] strs = val.Split('=');
  153. string keys = strs[0].Trim();
  154. strs = strs[1].Trim().Split(' ');
  155. string tempval = strs[0];
  156. dic.Add(keys, tempval);
  157. }
  158. }
  159. }