public void ImportTextFile(string inputDirectory) { var chunk = LocateLanguageFileChunk(); string compoundName = ResolveLanguageCasFile(chunk); using (BinaryWriter writer = new BinaryWriter(File.Open(compoundName, FileMode.Append))) { var offset = (int)writer.BaseStream.Position; int fileSize = ChunkHandler.Chunk(writer, inputDirectory + @"\manifest\" + EnglishChunkGuid); chunk.BasePosition = (uint)offset; chunk.BaseLength = (uint)fileSize; } UpdateManifest(); }
public void ImportFontFiles(string inputDirectory) { var fontPatchDescriptor = manifest.Patches.First(patch => patch.PatchIdentifier == EnglishFontDescriptorId); var manifestChunkDescriptorIndex = fontPatchDescriptor.PatchStart; var manifestChunk = manifest.Chunks[(int)manifestChunkDescriptorIndex]; var chunkDescriptor = chunkDescriptors.First(desc => desc.Offset == manifestChunk.BasePosition); var fileLengthsMapping = new Queue <int>(); var relativeChunkIdToFileNames = new Dictionary <int, List <string> >(); using (StreamReader reader = new StreamReader(File.Open(inputDirectory + @"\fonts_import.descriptor", FileMode.Open))) { string line = null; int lineNumber = 1; while ((line = reader.ReadLine()) != null) { var fileNames = new List <string>(); if (line != "-") { fileNames.AddRange(line.Split(',')); } relativeChunkIdToFileNames[lineNumber++] = fileNames; } } var resourceDescriptorsToUpdate = new List <ResourceDescriptor>(); using (BinaryWriter casWriter = new BinaryWriter(File.Open(BaseDirectory + DataDirs[1] + @"\cas_01.cas", FileMode.Append))) { for (int i = 1; i < fontPatchDescriptor.PatchLength; i++) { if (relativeChunkIdToFileNames[i].Count > 0) { uint compressedBlockSize = 0; var patchChunkDescriptor = manifest.Chunks[(int)manifestChunkDescriptorIndex + i]; patchChunkDescriptor.Archive = 0; patchChunkDescriptor.DirectoryId = (byte)DirectoryNames.InitialExperiencePatch; patchChunkDescriptor.BasePosition = (uint)casWriter.BaseStream.Position; foreach (string fileName in relativeChunkIdToFileNames[i]) { var compositeResourceDescriptor = chunkDescriptor.ResourceDescriptors.FirstOrDefault(descriptor => fileName.Contains(descriptor.Name)); var pathToNewFile = inputDirectory + @"\" + fileName; compressedBlockSize += (uint)ChunkHandler.Chunk(casWriter, pathToNewFile); compositeResourceDescriptor.Resource.Size = (int)new FileInfo(pathToNewFile).Length; resourceDescriptorsToUpdate.Add(compositeResourceDescriptor.Resource); } patchChunkDescriptor.BaseLength = compressedBlockSize; } } } using (BinaryWriter chunkDescriptorWriter = new BinaryWriter(File.Open(ResolveManifestCasFile(), FileMode.Open))) { foreach (var resourceDescriptor in resourceDescriptorsToUpdate) { chunkDescriptorWriter.BaseStream.Seek(resourceDescriptor.Offset + 4, SeekOrigin.Begin); chunkDescriptorWriter.WriteUInt32BE((UInt32)resourceDescriptor.Size); } } UpdateManifest(); }