/// <summary> /// 从文件创建一个节点 /// </summary> /// <param name="ParentFile">父文件</param> /// <param name="Parent">父节点</param> /// <param name="Name">名称</param> /// <param name="FileName">文件名</param> public FCYResPackageDataNode(FCYResPackage ParentFile, FCYResPackageFloderNode Parent, string Name, string FileName) : base(Parent, Name) { m_Package = ParentFile; FileStream tFile = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.Read); ReplaceStream(tFile); }
/// <summary> /// 从XML数据创建一个节点 /// </summary> /// <param name="ParentFile">父文件</param> /// <param name="Parent">父节点</param> /// <param name="XmlNode">Xml数据</param> public FCYResPackageDataNode(FCYResPackage ParentFile, FCYResPackageFloderNode Parent, XmlElement XmlNode) : base(Parent, XmlNode.GetAttribute("Name")) { m_Package = ParentFile; // 检查Xml是否有效 if (XmlNode.Name != "Node") { throw new FCYExcpInvalidNode("Not a Node."); } // 设置额外数据 AdditionData = XmlNode.InnerText; // 原始大小 if (XmlNode.HasAttribute("OrgSize")) { m_DataRealSize = Convert.ToUInt32(XmlNode.GetAttribute("OrgSize")); } else { throw new FCYExcpNodeErr("Attribute Err."); } // 压缩后大小 if (XmlNode.HasAttribute("CompressedSize")) { m_DataCompressedSize = Convert.ToUInt32(XmlNode.GetAttribute("CompressedSize")); } else { throw new FCYExcpNodeErr("Attribute Err."); } // 位移量 if (XmlNode.HasAttribute("Offset")) { m_MainDataOffset = Convert.ToUInt32(XmlNode.GetAttribute("Offset")); } else { throw new FCYExcpNodeErr("Attribute Err."); } // 是否压缩 if (XmlNode.HasAttribute("IsCompressed")) { m_IsCompressed = XmlNode.GetAttribute("IsCompressed") == "yes" ? true : false; } else { throw new FCYExcpNodeErr("Attribute Err."); } }
/// <summary> /// 从Xml创建文件夹节点 /// </summary> /// <param name="Package">绑定的资源包</param> /// <param name="Parent">父节点</param> /// <param name="XmlNode">Xml节点</param> public FCYResPackageFloderNode(FCYResPackage Package, FCYResPackageFloderNode Parent, XmlElement XmlNode) : base(Parent, XmlNode.HasAttribute("Name") ? XmlNode.GetAttribute("Name") : "") { m_NodeList.Clear(); foreach (XmlElement x in XmlNode) { if (x.Name == "Floder") { FCYResPackageFloderNode tFloder = new FCYResPackageFloderNode(Package, this, x); Add(tFloder); } else { FCYResPackageDataNode tData = new FCYResPackageDataNode(Package, this, x); Add(tData); } } }
/// <summary> /// 从XML数据创建一个节点 /// </summary> /// <param name="ParentFile">父文件</param> /// <param name="Parent">父节点</param> /// <param name="XmlNode">Xml数据</param> public FCYResPackageDataNode(FCYResPackage ParentFile, FCYResPackageFloderNode Parent, XmlElement XmlNode) : base(Parent, XmlNode.GetAttribute("Name")) { m_Package = ParentFile; // 检查Xml是否有效 if (XmlNode.Name != "Node") throw new FCYExcpInvalidNode("Not a Node."); // 设置额外数据 AdditionData = XmlNode.InnerText; // 原始大小 if (XmlNode.HasAttribute("OrgSize")) m_DataRealSize = Convert.ToUInt32(XmlNode.GetAttribute("OrgSize")); else throw new FCYExcpNodeErr("Attribute Err."); // 压缩后大小 if (XmlNode.HasAttribute("CompressedSize")) m_DataCompressedSize = Convert.ToUInt32(XmlNode.GetAttribute("CompressedSize")); else throw new FCYExcpNodeErr("Attribute Err."); // 位移量 if (XmlNode.HasAttribute("Offset")) m_MainDataOffset = Convert.ToUInt32(XmlNode.GetAttribute("Offset")); else throw new FCYExcpNodeErr("Attribute Err."); // 是否压缩 if (XmlNode.HasAttribute("IsCompressed")) m_IsCompressed = XmlNode.GetAttribute("IsCompressed") == "yes" ? true : false; else throw new FCYExcpNodeErr("Attribute Err."); }
/// <summary> /// 创建一个节点 /// </summary> /// <param name="ParentFile">父文件</param> /// <param name="Parent">父节点</param> /// <param name="Name">名称</param> public FCYResPackageDataNode(FCYResPackage ParentFile, FCYResPackageFloderNode Parent, string Name) : base(Parent, Name) { m_Package = ParentFile; }
// --- 新建 --- private void toolStripButton_New_Click(object sender, EventArgs e) { if (treeView_Main.Tag != null) { if (MessageBox.Show("确认要创建新文件?", "创建", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; } updateDetail(null); FCYResPackage tPackage = new FCYResPackage(); // 清空 treeView_Main.Nodes.Clear(); // 创建根节点 TreeNode tRootNode = new TreeNode("根节点",0,0); tRootNode.Tag = tPackage.RootNode; treeView_Main.Nodes.Add(tRootNode); // 绑定数据 treeView_Main.Tag = tPackage; GC.Collect(); }
private void openFile(string Path) { FCYResPackage tPackage = null; try { tPackage = new FCYResPackage(Path); } catch (FCYExcpOpenErr expt) { showErr("打开文件失败。该文件可能已被占用。\n\n详细信息:\n" + expt.Message, "打开失败"); return; } // 清空 treeView_Main.Nodes.Clear(); updateDetail(null); // 创建根节点 TreeNode tRootNode = new TreeNode("根节点", 0, 0); tRootNode.Tag = tPackage.RootNode; // 绑定数据 treeView_Main.Tag = tPackage; GC.Collect(); // 读取整个流 foreach (FCYResPackageNode x in tPackage.RootNode.NodeList) { tRootNode.Nodes.Add(readNodes(x)); } // 加入根节点 treeView_Main.Nodes.Add(tRootNode); treeView_Main.ExpandAll(); }