示例#1
0
        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);
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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)));
            }
        }
示例#4
0
        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);
        }