コード例 #1
0
ファイル: GGPKFile.cs プロジェクト: XnIcRaM/LibPathOfExile
        public static void DumpTreeNode(GGPKFileStream stream, TreeNode n, string path, bool skipExisting=false)
        {
            if (n.IsFileNode) {
            var fileNode = n.Element.Left;
            var filePath = Path.Combine(path, fileNode.FileName);
            if (skipExisting && File.Exists(filePath))
              return;
            ExportFileNode(stream, n.Element.Left, filePath);
              }
              else if (n.IsDirectoryTreeNode) {
            var dir = n.Element.Right;
            var subPath = Path.Combine(path, dir.Node.Name);
            Directory.CreateDirectory(subPath);

            foreach (var child in dir.Children) {
              DumpTreeNode(stream, child, subPath, skipExisting);
            }
              }
        }
コード例 #2
0
ファイル: GGPKFile.cs プロジェクト: XnIcRaM/LibPathOfExile
        public static void ExportFileNode(GGPKFileStream stream, FileNode fileNode, string outPath, string fileName=null)
        {
            var srcReader = new BinaryReader(stream);
              var original = stream.Position;
              var size = (int)fileNode.DataSize;
              var dir = Path.GetDirectoryName(outPath);
              var fullPath = Path.Combine(dir, fileName ?? fileNode.FileName);

              stream.Seek(fileNode.DataOffset, SeekOrigin.Begin);

              if (dir != "")
            Directory.CreateDirectory(dir);

            using (var file = File.Create(fullPath))
            using (var outWriter = new BinaryWriter(file)) {
              if (fileNode.DataSize != 0) {
            outWriter.Write(srcReader.ReadBytes(size));
              }
            }

              stream.Seek(original, SeekOrigin.Begin);
        }
コード例 #3
0
ファイル: FileNode.cs プロジェクト: XnIcRaM/LibPathOfExile
 public void SaveAs(GGPKFileStream stream, string path, string fileName = null)
 {
     GGPKFile.ExportFileNode(stream, this, path, fileName);
 }