123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Text;
- using System.Linq;
- using DllEapEntity;
- namespace ZipFileHelper
- {
- /// <summary>
- /// 解压KS文件
- /// </summary>
- public class UnCompressForKs
- {
- public static List<FileSystemInfo> 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<string,string> GetParams(string rarpath, string filepath, string filename, string desdir, ref string errorinfo)
- {
- try
- {
- List<FileSystemInfo> files = UnCompress(rarpath, filepath, filename, desdir, ref errorinfo);
- if (files == null)
- return null;
- List<FileSystemInfo> prm = files.Where(t => t.Extension.ToLower() == ".prm").OrderBy(t => t.FullName).ToList();
- if (prm.Count <= 0)
- return null;
- //解析第一个文件
- List<string> filesdata = ReadFile(prm[0].FullName, ref errorinfo);
- //去掉前2行
- filesdata.Remove(filesdata[0]);
- filesdata.Remove(filesdata[0]);
- Dictionary<string, string> val = new Dictionary<string, string>();
- foreach(var item in filesdata)
- {
- GetValue(val, item);
- }
- return val;
- }
- catch(Exception ex)
- {
- errorinfo = ex.Message.ToString();
- return null;
- }
- }
- public static List<FileParams> GetParamsFor(string rarpath, string filepath, string filename, string desdir,int modelid, ref string errorinfo)
- {
- try
- {
- List<FileSystemInfo> files = UnCompress(rarpath, filepath, filename, desdir, ref errorinfo);
- if (files == null)
- return null;
- List<FileSystemInfo> prm = files.Where(t => t.Extension.ToLower() == ".prm").OrderBy(t => t.FullName).ToList();
- if (prm.Count <= 0)
- return null;
- //解析第一个文件
- List<string> filesdata = ReadFile(prm[0].FullName, ref errorinfo);
- //去掉前2行
- filesdata.Remove(filesdata[0]);
- filesdata.Remove(filesdata[0]);
- List<FileParams> val = new List<FileParams>();
- foreach (var item in filesdata)
- {
- GetValue(val, item,modelid);
- }
- return val;
- }
- catch (Exception ex)
- {
- errorinfo = ex.Message.ToString();
- return null;
- }
- }
- public static List<string> ReadFile(string filepath,ref string errorinfo)
- {
- try
- {
- //将文件读取到链表
- StreamReader sr = new StreamReader(filepath, System.Text.Encoding.UTF8);
- List<string> files = new List<string>();
- 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<FileParams> 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<string,string> 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);
- }
- }
- }
|