using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Linq; using DllEapEntity; namespace ZipFileHelper { /// /// 解压KS文件 /// public class UnCompressForKs { public static List UnCompress(string rarpath,string filepath,string filename,string desdir,ref string errorinfo) { try { desdir += "\\" + filename; if (Directory.Exists(desdir)) { Directory.Delete(desdir, true);//删除文件夹 } Directory.CreateDirectory(desdir);//创建目录 RarOperate rar = new RarOperate(); UnCompressResults result = rar.unCompressRAR(rarpath,filepath, desdir, "", ref errorinfo); if (result != UnCompressResults.Success) { return null; } DirectoryInfo dir = new DirectoryInfo(desdir); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录 if (fileinfo.Length <= 0) { errorinfo = "未找到解压后的文件。"; return null; } //继续解压 result = rar.unCompressRAR(rarpath, fileinfo[0].FullName, desdir, "", ref errorinfo); if (result != UnCompressResults.Success) { return null; } fileinfo[0].Delete();//删除一级压缩文件 fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录 if (fileinfo.Length <= 0) { errorinfo = "未找到解压后的文件。"; return null; } return fileinfo.ToList(); } catch(Exception ex) { errorinfo = ex.Message.ToString(); return null; } } public static Dictionary GetParams(string rarpath, string filepath, string filename, string desdir, ref string errorinfo) { try { List files = UnCompress(rarpath, filepath, filename, desdir, ref errorinfo); if (files == null) return null; List prm = files.Where(t => t.Extension.ToLower() == ".prm").OrderBy(t => t.FullName).ToList(); if (prm.Count <= 0) return null; //解析第一个文件 List filesdata = ReadFile(prm[0].FullName, ref errorinfo); //去掉前2行 filesdata.Remove(filesdata[0]); filesdata.Remove(filesdata[0]); Dictionary val = new Dictionary(); foreach(var item in filesdata) { GetValue(val, item); } return val; } catch(Exception ex) { errorinfo = ex.Message.ToString(); return null; } } public static List GetParamsFor(string rarpath, string filepath, string filename, string desdir,int modelid, ref string errorinfo) { try { List files = UnCompress(rarpath, filepath, filename, desdir, ref errorinfo); if (files == null) return null; List prm = files.Where(t => t.Extension.ToLower() == ".prm").OrderBy(t => t.FullName).ToList(); if (prm.Count <= 0) return null; //解析第一个文件 List filesdata = ReadFile(prm[0].FullName, ref errorinfo); //去掉前2行 filesdata.Remove(filesdata[0]); filesdata.Remove(filesdata[0]); List val = new List(); foreach (var item in filesdata) { GetValue(val, item,modelid); } return val; } catch (Exception ex) { errorinfo = ex.Message.ToString(); return null; } } public static List ReadFile(string filepath,ref string errorinfo) { try { //将文件读取到链表 StreamReader sr = new StreamReader(filepath, System.Text.Encoding.UTF8); List files = new List(); string tempstr = sr.ReadLine(); while (tempstr != null) { if(tempstr.Contains("=")) files.Add(tempstr); tempstr = sr.ReadLine(); } sr.Close(); return files; } catch(Exception ex) { errorinfo = ex.Message.ToString(); return null; } } public static void GetValue(List dic, string val,int modelid) { string[] strs = val.Split('='); string keys = strs[0].Trim(); strs = strs[1].Trim().Split(' '); string tempval = strs[0]; FileParams temp = new FileParams(); temp.FName = keys; temp.FVal = tempval; temp.ModelID = modelid; temp.ID = 0; dic.Add(temp); } public static void GetValue(Dictionary dic,string val) { string[] strs = val.Split('='); string keys = strs[0].Trim(); strs = strs[1].Trim().Split(' '); string tempval = strs[0]; dic.Add(keys, tempval); } } }