Exemplo n.º 1
0
        /// <summary>
        /// Read raw data into <paramref name="buffer"/> from a file on the disk or in a .pak file, without endian conversion.
        /// </summary>
        /// <returns>The amount of bytes read.</returns>
        /// <param name="handle">Handle to the file.</param>
        /// <param name="buffer">Buffer that contains the read data.</param>
        /// <param name="length">Length of the data to be read.</param>
        public static uint Read(CryPakFile handle, byte[] buffer, uint length)
        {
            if (handle == null)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            if (buffer == null)
            {
                throw new ArgumentNullException(nameof(buffer));
            }

            if (length == 0)
            {
                throw new ArgumentOutOfRangeException(nameof(length), "Buffer length has to be greater than 0.");
            }

            using (var pinner = new AutoPinner(buffer))
            {
                var cryPakHandle = GetCryPakHandle();
                var dataHandle   = new HandleRef(pinner.Handle, pinner.Handle.AddrOfPinnedObject());
                var fileHandle   = GetFileHandle(handle.NativeHandle);

                var bytesRead = GlobalPINVOKE.ICryPak_FReadRaw(cryPakHandle, dataHandle, sizeof(byte), length, fileHandle);

                return(bytesRead);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Closes the filehandle <paramref name="handle"/>.
        /// </summary>
        /// <param name="handle">The file handle.</param>
        public static void Close(CryPakFile handle)
        {
            if (handle == null)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            Global.gEnv.pCryPak.FClose(handle.NativeHandle);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Get the file size of file belonging to <paramref name="handle"/>.
        /// </summary>
        /// <returns>The file size.</returns>
        /// <param name="handle">Filehandle of the file.</param>
        public static uint GetSize(CryPakFile handle)
        {
            if (handle == null)
            {
                return(0);
            }

            return(Global.gEnv.pCryPak.FGetSize(handle.NativeHandle));
        }