/// <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); } }
/// <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); }
/// <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)); }