Ejemplo n.º 1
0
        private int ReadFileIndexerOfName(byte[] buffer, int offset, VpkContainedFileDescription fileNode)
        {
            fileNode.meta.crc32 = BitConverter.ToUInt32(buffer, offset);
            offset += 4;
            fileNode.meta.preloadLength = BitConverter.ToInt16(buffer, offset);
            Debug.WriteLineIf(fileNode.meta.preloadLength != 0, fileNode.meta.preloadLength);
            offset += 2;
            fileNode.meta.archieveIndex = BitConverter.ToInt16(buffer, offset);
            offset += 2;
            fileNode.meta.archieveOffset = BitConverter.ToInt32(buffer, offset);
            offset += 4;
            fileNode.meta.fileLength = BitConverter.ToInt32(buffer, offset);
            offset += 4;
            ushort suffix = BitConverter.ToUInt16(buffer, offset);

            if (suffix != ContainedFileMeta.Suffix)
            {
                Debug.WriteLine(String.Format(
                                    "ERROR: File index parsing: Unexpected suffix while reading file meta from index, expecting {0:X}, got {1:X}.",
                                    ContainedFileMeta.Suffix, suffix));
                throw new VpkException(VpkException.ExceptionReason.Unknown);
            }
            offset += 2;
            if (fileNode.meta.archieveIndex == 0x7fff)
            {
                fileNode.meta.archieveOffset += header.headerSize + header.directorySize;
            }
            fileNode.preload = new byte[fileNode.meta.preloadLength];
            Array.Copy(buffer, offset, fileNode.preload, 0, fileNode.meta.preloadLength);
            offset += fileNode.meta.preloadLength;
            return(offset);
        }
 public VpkContainedFileStream(VpkContainedFileDescription desc, FileInfo fileInfo)
 {
     this.desc           = desc;
     fileStream          = fileInfo.OpenRead();
     fileStream.Position = desc.meta.archieveOffset;
     position            = 0;
 }
Ejemplo n.º 3
0
        public byte[] GetContainedFileBytes(VpkContainedFileDescription description)
        {
            var len = description.meta.fileLength + description.meta.preloadLength;

            using (var stream = new VpkContainedFileStream(description, fileInfo)) {
                byte[] arr = new byte[len];
                stream.Read(arr, 0, len);
                return(arr);
            }
        }
Ejemplo n.º 4
0
 public string GetContainedFileText(VpkContainedFileDescription description)
 {
     using (var reader = new StreamReader(
                // This way. The file can be in UTF8 with or w/o BOM and UTF16.
                // https://stackoverflow.com/questions/3545402/any-difference-between-file-readalltext-and-using-a-streamreader-to-read-file
                // https://stackoverflow.com/questions/11701341/encoding-utf8-getstring-doesnt-take-into-account-the-preamble-bom
                new VpkContainedFileStream(description, fileInfo), Encoding.UTF8, true)) {
         return(reader.ReadToEnd());
     }
 }
Ejemplo n.º 5
0
        private int ReadUnderPath(byte[] buffer, int offset, Dictionary <string, VpkContainedFileDescription> pathNode)
        {
            int maxLen = buffer.Length;

            while (offset < maxLen)
            {
                var name = CStringUtil.ReadCString(buffer, ref offset);
                if (name.Length == 0)
                {
                    break;
                }
                //name = JoinPath(path, name, extensionName);
                var fileNode = new VpkContainedFileDescription(name);
                pathNode[name] = fileNode;
                offset         = ReadFileIndexerOfName(buffer, offset, fileNode);
            }
            return(offset);
        }