コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 public async Task <byte[]> ReadFileFromStreamAsync(IPackedFileInfo resourcePackFile)
 {
     ResourcesFileStream.Position = FILE_LIST_OFFSET + _fileListDataSize + resourcePackFile.Offset;
     return(await ResourcesFileStream.ReadBytesAsync((int)resourcePackFile.Size));
 }
コード例 #5
0
 public byte[] ReadFileFromStream(IPackedFileInfo resourcePackFile)
 {
     return(ReadFileFromStreamAsync(resourcePackFile).ConfigureAwait(false).GetAwaiter().GetResult());
 }