public string MakeMockFiles(int numberOfFiles, int fileSize = 350) { var packedFileInfo = new IPackedFileInfo[numberOfFiles]; var rng = new Random(); Directory.CreateDirectory("unpackedFiles"); var randomBuffer = new byte[fileSize]; for (var x = 0; x < numberOfFiles; x++) { packedFileInfo[x] = new PackedFileInfo(); rng.NextBytes(randomBuffer); packedFileInfo[x].Name = $"testfile{x}"; packedFileInfo[x].UnpackedFileLocation = $"unpackedFiles\\{packedFileInfo[x].Name}.bin"; File.WriteAllBytes(packedFileInfo[x].UnpackedFileLocation, randomBuffer); } var packedFile = "testFile.rpk"; ResourcePackFile.PackFiles(packedFileInfo, packedFile); Directory.Delete("unpackedFiles", true); return(packedFile); }
public async Task UnpackFile(IPackedFileInfo resourcePackFile, string unpackDirectory) { var fileData = await ReadFileFromStreamAsync(resourcePackFile); resourcePackFile.UnpackedFileLocation = $"{unpackDirectory}\\{resourcePackFile.Name}{resourcePackFile.Extension}"; File.WriteAllBytes(resourcePackFile.UnpackedFileLocation, fileData); }
public IPackedFileInfo[] ReadPackedFiles() { ResourcesFileStream.Position = FILE_LIST_OFFSET; var packedFiles = new IPackedFileInfo[PackedFileCount]; for (var x = 0; x < packedFiles.Length; x++) { packedFiles[x] = new PackedFileInfo { Name = Encoding.UTF8.GetString(ResourcesFileStream.ReadBytes(16)).Split('\0')[0] ?? throw new Exception("Packed file name could not be read."), Offset = ResourcesFileStream.Read <uint>(), Size = ResourcesFileStream.Read <uint>(), }; var currentReadPosition = ResourcesFileStream.Position; ResourcesFileStream.Position = packedFiles[x].Offset; packedFiles[x].Extension = ResourcePackType.GetFileType(ResourcesFileStream.ReadBytes(16)); ResourcesFileStream.Position = currentReadPosition; // Fix reader alignment. ResourcesFileStream.Read <long>(); } return(packedFiles); }
public async Task <byte[]> ReadFileFromStreamAsync(IPackedFileInfo resourcePackFile) { ResourcesFileStream.Position = FILE_LIST_OFFSET + _fileListDataSize + resourcePackFile.Offset; return(await ResourcesFileStream.ReadBytesAsync((int)resourcePackFile.Size)); }
public byte[] ReadFileFromStream(IPackedFileInfo resourcePackFile) { return(ReadFileFromStreamAsync(resourcePackFile).ConfigureAwait(false).GetAwaiter().GetResult()); }