public async Task PatchFont() { try { ClearStatus(); ContainerEntry fontEntry = ArcFile.GetEntry("im2nx_font.par"); if (fontEntry == null) { throw new FileNotFoundException("File im2nx_font.par not found. Make sure you are opening disc.arc"); } using (Stream parStream = await fontEntry.GetData()) { ReportMessage("Reading im2nx_font.par..."); Font font = await Task.Run(() => Font.CreateFromPar(parStream)); ReportMessage("Patching font..."); await Task.Run(() => font.AddDigraphs()); ReportMessage("Writing font as par..."); using MemoryStream memStream = new MemoryStream(); await font.WriteFontPar(memStream, false); memStream.Position = 0; await fontEntry.SetData(memStream); } ReportMessage("Done."); } catch (Exception ex) { ReportException(ex); } }
public async Task WriteXlsxTest(string xlsxName, string arcName, string commuList) { using CommuToXlsx commu = new CommuToXlsx(xlsxName, true); using StreamReader streamReader = new StreamReader(commuList); using ArcFile arcFile = new ArcFile(arcName); while (!streamReader.EndOfStream) { string fileName = streamReader.ReadLine(); using EntryStack entryStack = await arcFile.GetEntryRecursive(fileName); ContainerEntry entry = entryStack.Entry; using Stream memStream = await entry.GetData(); commu.GetAndWriteCommu(memStream, fileName); } }
private async Task <EntryStack> GetEntryRecursive(string fileName, EntryStack stack) { int parIndex = fileName.IndexOf("_par/"); int ptaIndex = fileName.IndexOf("_pta/"); int index; if (parIndex == -1) { index = ptaIndex; } else if (ptaIndex == -1) { index = parIndex; } else { index = Math.Min(parIndex, ptaIndex); } if (index == -1) { ContainerEntry entry = GetEntry(fileName); if (entry == null) { stack.Dispose(); return(null); } stack.Entry = entry; return(stack); } else { ContainerEntry entry = GetEntry(fileName.Substring(0, index) + '.' + fileName.Substring(index + 1, 3)); if (entry == null) { stack.Dispose(); return(null); } Stream stream = await entry.GetData(); stack.Push(stream); ParFile parFile = new ParFile(stream); stack.Push(parFile); return(await parFile.GetEntryRecursive(fileName.Substring(index + 5))); } }
public async Task GetEntryAndWriteToFile(string filename, string entryFilepath, string expectedFile) { using ArcFile arcFile = new ArcFile(filename); ContainerEntry arcEntry = arcFile.GetEntry(entryFilepath); if (arcEntry == null) { Assert.Fail("Entry not found."); } using (Stream stream = await arcEntry.GetData()) { using FileStream fileStream = new FileStream("temp.dat", FileMode.Create, FileAccess.Write); stream.CopyTo(fileStream); } bool eq = Compare.CompareFiles(expectedFile, "temp.dat"); File.Delete("temp.dat"); Assert.IsTrue(eq); }