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