/// <summary> /// 装载Vdx文件并显示面板图 /// </summary> /// <param name="EqOid"></param> private void LoadVdxFile(string EqOid) { string vdxFilePath = string.Empty; //从文件目录读取面板图文件 if (File.Exists(System.IO.Path.Combine(System.IO.Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory), ("panel\\" + EqOid + ".vdx")))) { Log.WriteLog("开始从文件装载面板图..."); this.VdxFile = System.IO.Path.Combine(System.IO.Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory), ("panel\\" + EqOid + ".vdx")); return; } //从图库读取面板图文件 VdxManager vdxManager = new VdxManager(); EquipVdx eqVdx = new EquipVdx(); eqVdx.Sysoid = EqOid; if (vdxManager.ReadVdxInfo(ref eqVdx)) { Log.WriteLog("开始从图库装载面板图..."); if (!File.Exists(eqVdx.tempFileName)) { Log.WriteLog("装载面板图失败!文件不存在:" + eqVdx.tempFileName); return; } this.VdxFile = eqVdx.tempFileName; //File.Delete(eqVdx.tempFileName); } else { this.Document.Text = "面板图文件不存在!"; this.Document.Font = new Font("", 12.0f, FontStyle.Bold); return; } }
/// <summary> /// 解包设备Vdx /// </summary> /// <param name="VdxFileName">解包出来的Vdx文件信息</param> /// <returns>解包成功返回true,失败返回false</returns> private bool ReadVdxFromPackage(ref EquipVdx equipVdx) { try { string FilePath = Path.Combine(Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory), "data\\SiteViewVdx.mpg"); string vdxFilePath = Path.Combine(Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory), ("data\\" + equipVdx.FileName)); using (FileStream packStream = File.OpenRead(FilePath)) { //从包中取出 byte[] packVdx = new byte[packStream.Length]; int size = packStream.Read(packVdx, 0, packVdx.Length); using (FileStream coStream = File.Create("c:\\VisioCo.tmp")) { //解密 FileStream enStream = File.Create("c:\\VisioEn.tmp"); enStream.Write(packVdx, Convert.ToInt32(equipVdx.PackIndex), Convert.ToInt32(equipVdx.PackLength)); enStream.Flush(); enStream.Close(); byte[] coVdx = new byte[equipVdx.PackLength]; enStream = File.OpenRead("c:\\VisioEn.tmp"); enStream.Read(coVdx, 0, coVdx.Length); byte[] enVdx; if (!DataManager.Decrypt(coVdx, out enVdx)) { return false; } coStream.Write(enVdx, 0, enVdx.Length); //解压缩文件 coStream.Position = 0; using (FileStream outStream = File.Create(vdxFilePath)) { if (!DataManager.Decompress(coStream, outStream)) { return false; } outStream.Close(); } equipVdx.tempFileName = vdxFilePath; enStream.Dispose(); coStream.Close(); } } File.Delete("c:\\VisioCo.tmp"); File.Delete("c:\\VisioEn.tmp"); } catch (Exception ex) { Log.WriteLog("解包设备信息出错!错误: " + ex.ToString()); return false; } return true; }
/// <summary> /// 根据设备oid号,从数据库中返回设备信息 /// </summary> /// <param name="Sysoid">设备OID</param> /// <param name="EquipVdx">设备信息</param> /// <returns>读取成功返回true,失败返回false</returns> public bool ReadVdxInfo(ref EquipVdx equipVdx) { try { //清理历史vdx文件 foreach (string vdx in Directory.GetFiles(Path.Combine(Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory), "data\\"), "*.vdx")) { File.Delete(vdx); } string FilePath = Path.Combine(Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory), "data\\SiteViewVdx.dat"); string tempFilePath = "c:\\SiteView.tmp"; FileStream inStream = File.OpenRead(FilePath); FileStream outStream = File.Create(tempFilePath); DataManager.Decompress(inStream, outStream); using (FileStream VdxStream = new FileStream(tempFilePath, FileMode.OpenOrCreate)) { BinaryFormatter bf = new BinaryFormatter(); EquipVdx[] eqVdx = (EquipVdx[])bf.Deserialize(VdxStream); for (int i = 0; i < eqVdx.Length; i++) { if (eqVdx[i].Sysoid == equipVdx.Sysoid) { equipVdx = eqVdx[i]; ReadVdxFromPackage(ref equipVdx); break; } } VdxStream.Close(); } } catch (Exception ex) { Log.WriteLog("读取设备信息出错!错误: " + ex.ToString()); return false; } return true; }
/// <summary> /// 打包设备Vdx文件 /// </summary> /// <param name="VdxFileName">要打包的Vdx文件信息</param> /// <returns>打包成功返回true,失败返回false</returns> private bool WriteVdxToPackage(ref EquipVdx equipVdx, ref FileStream packStream) { try { //string FilePath = Path.Combine(Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory), "data\\SiteViewVdx.mpg"); //using (FileStream packStream = new FileStream(FilePath, FileMode.OpenOrCreate)) { equipVdx.PackIndex = packStream.Length; //压缩文件 using (FileStream inStream = File.OpenRead(equipVdx.tempFileName)) { FileStream coStream = File.Create("c:\\VisioCo.tmp"); if (!DataManager.Compress(inStream, coStream)) { return false; } //写入包中 coStream = File.OpenRead("c:\\VisioCo.tmp"); byte[] coVdx = new byte[coStream.Length]; int size = coStream.Read(coVdx, 0, coVdx.Length); byte[] enVdx; //加密 if (!DataManager.Encrypt(coVdx, out enVdx)) { return false; } packStream.Position = packStream.Length; packStream.Write(enVdx, 0, enVdx.Length); equipVdx.PackLength = enVdx.Length; inStream.Close(); coStream.Close(); coStream.Dispose(); } //packStream.Flush(); //packStream.Close(); } //File.Delete("c:\\VisioEn.tmp"); File.Delete("c:\\VisioCo.tmp"); } catch (Exception ex) { Log.WriteLog("打包设备信息出错!错误: " + ex.ToString()); return false; } return true; }
/// <summary> /// 把设备信息写入到数据库中 /// </summary> /// <param name="EquipVdx">设备信息数组</param> /// <returns>写入成功返回true,失败返回false</returns> public bool WriteVdxInfo(EquipVdx[] equipVdx) { try { string FilePath = Path.Combine(Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory), "data\\SiteViewVdx.dat"); if (File.Exists(FilePath)) { File.Delete(FilePath); } string FilePath_mpg = Path.Combine(Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory), "data\\SiteViewVdx.mpg"); if (File.Exists(FilePath_mpg)) { File.Delete(FilePath_mpg); } using (FileStream VdxStream = new FileStream(FilePath, FileMode.OpenOrCreate)) { FileStream packStream = new FileStream(FilePath_mpg, FileMode.OpenOrCreate); ProgressBar.Visible = true; ProgressBar.Value = 0; int length = equipVdx.Length; int step = ProgressBar.Maximum / length; for (int i = 0; i < length; i++) { // WriteVdxToPackage(ref equipVdx[i], ref packStream); ProgressBar.Value += step; PackInfo.Text = (i + 1) + "/" + length.ToString(); Application.DoEvents(); } BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(VdxStream, equipVdx); VdxStream.Close(); packStream.Flush(); packStream.Close(); packStream.Dispose(); ProgressBar.Value = ProgressBar.Maximum; ProgressBar.Visible = false; PackInfo.Text = string.Empty; } //压缩dat文件 string tempFilePath = "c:\\SiteView.tmp"; FileStream inStream = File.OpenRead(FilePath); FileStream outStream = File.Create(tempFilePath); DataManager.Compress(inStream, outStream); inStream.Close(); outStream.Close(); File.Delete(FilePath); File.Move(tempFilePath, FilePath); } catch (Exception ex) { Log.WriteLog("写入设备信息出错!错误: " + ex.ToString()); ProgressBar.Visible = false; return false; } return true; }