Ejemplo n.º 1
0
        private static void ReadArchive <T>(string path, Action <IEnumerable <string> > assignEntries) where T : ArchiveFile, new()
        {
            Assert.IsFalse(string.IsNullOrEmpty(path));
            Assert.IsNotNull(assignEntries);

            var files = new List <string>();

            using (var input = new FileStream(path, FileMode.Open))
            {
                var file = new T {
                    Name = Path.GetFileName(path)
                };
                file.Read(input);

                foreach (var exportedFile in file.ExportFiles(input))
                {
                    files.Add(exportedFile.FileName);

                    var outputDirectory = new FileSystemDirectory(Path.GetDirectoryName(exportedFile.FileName));
                    var filename        = Path.GetFileName(exportedFile.FileName);
                    outputDirectory.WriteFile(filename, exportedFile.DataStream);
                }
            }

            assignEntries(files);
        }
Ejemplo n.º 2
0
        private static void ReadArchive <T>(string path) where T : ArchiveFile, new()
        {
            string fileDirectory            = Path.GetDirectoryName(path);
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(path);
            string extension           = Path.GetExtension(path).Replace(".", "");
            string outputDirectoryPath = string.Format("{0}\\{1}_{2}", fileDirectory, fileNameWithoutExtension, extension);
            string xmlOutputPath       = Path.Combine(fileDirectory,
                                                      string.Format("{0}.xml", Path.GetFileName(path)));
            IDirectory outputDirectory = new FileSystemDirectory(outputDirectoryPath);

            using (FileStream input = new FileStream(path, FileMode.Open))
                using (FileStream xmlOutput = new FileStream(xmlOutputPath, FileMode.Create))
                {
                    T file = new T();
                    file.Name = Path.GetFileName(path);
                    file.Read(input);
                    foreach (var exportedFile in file.ExportFiles(input))
                    {
                        Console.WriteLine(exportedFile.FileName);
                        outputDirectory.WriteFile(exportedFile.FileName, exportedFile.DataStream);
                    }

                    ArchiveSerializer.Serialize(xmlOutput, file);
                }
        }
Ejemplo n.º 3
0
        private static T ReadArchive <T>(string path, bool skipWrite = false) where T : ArchiveFile, new()
        {
            string fileDirectory            = Path.GetDirectoryName(path);
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(path);
            string extension           = Path.GetExtension(path).Replace(".", "");
            string outputDirectoryPath = string.Format("{0}\\{1}_{2}", fileDirectory, fileNameWithoutExtension, extension);
            string xmlOutputPath       = Path.Combine(fileDirectory,
                                                      string.Format("{0}.xml", Path.GetFileName(path)));
            IDirectory outputDirectory = new FileSystemDirectory(outputDirectoryPath);

            using (FileStream input = new FileStream(path, FileMode.Open))
                using (FileStream xmlOutput = new FileStream(xmlOutputPath, FileMode.Create))
                {
                    T file = new T();
                    file.Name = Path.GetFileName(path);
                    file.Read(input);
                    if (skipWrite == false)
                    {
                        foreach (var exportedFile in file.ExportFiles(input))
                        {
                            Console.WriteLine(exportedFile.FileName);
                            outputDirectory.WriteFile(exportedFile.FileName, exportedFile.DataStream);
                        }
                    }

                    ArchiveSerializer.Serialize(xmlOutput, file);//tex could probably skip this too but would have to break out of using xmlOutput else would leave empty xml

                    return(file);
                }
        }
Ejemplo n.º 4
0
        public List <string> ReadArchive <T>(string filePath, string outputDir) where T : ArchiveFile, new()
        {
            IDirectory    iDir      = new FileSystemDirectory(outputDir);
            List <string> fileNames = new List <string>();

            using (FileStream input = new FileStream(filePath, FileMode.Open))
            {
                T file = new T();
                file.Read(input);
                foreach (var exportedFile in file.ExportFiles(input))
                {
                    if (typeof(T) == typeof(SbpFile))
                    {
                        exportedFile.FileName = Path.GetFileNameWithoutExtension(filePath) + exportedFile.FileName;
                    }

                    fileNames.Add(exportedFile.FileName);

                    string exportedFileFullName = Path.Combine(outputDir, exportedFile.FileName);
                    if (!File.Exists(exportedFileFullName)) // saved roughly 1:10 when unpacking texture3 and chunk3
                    {
                        iDir.WriteFile(exportedFile.FileName, exportedFile.DataStream);
                    }
                }
            }
            return(fileNames);
        }
Ejemplo n.º 5
0
        public List <string> ReadArchiveCatchEdgeCases <T>(string filePath, string outputDir) where T : ArchiveFile, new() // Searches for oddball files that share a filename but have different contents
        {
            IDirectory    iDir      = new FileSystemDirectory(outputDir);
            List <string> fileNames = new List <string>();

            using (FileStream input = new FileStream(filePath, FileMode.Open))
            {
                T file = new T();
                file.Read(input);
                foreach (var exportedFile in file.ExportFiles(input))
                {
                    string exportedFileFullName = Path.Combine(outputDir, exportedFile.FileName);
                    if (File.Exists(exportedFileFullName))
                    {
                        string outfilename    = Path.GetFileName(exportedFile.FileName);
                        string outfileDir     = Path.GetDirectoryName(exportedFile.FileName);
                        string parentFilename = Path.GetFileNameWithoutExtension(filePath);

                        exportedFile.FileName = Path.Combine(outfileDir, parentFilename + "_oddball_" + outfilename);

                        fileNames.Add(exportedFile.FileName);
                        iDir.WriteFile(exportedFile.FileName, exportedFile.DataStream);

                        string specialFileFullName = Path.Combine(outputDir, exportedFile.FileName);
                        if (new FileInfo(specialFileFullName).Length == new FileInfo(exportedFileFullName).Length)
                        {
                            File.Delete(specialFileFullName);
                        }
                        else
                        {
                            Console.WriteLine("Special file found: " + specialFileFullName);
                        }
                    }
                    else
                    {
                        fileNames.Add(exportedFile.FileName);
                        iDir.WriteFile(exportedFile.FileName, exportedFile.DataStream);
                    }
                }
            }
            return(fileNames);
        }
Ejemplo n.º 6
0
        public void ReadQARArchive(string filePath, string outputDir)
        {
            IDirectory iDir = new FileSystemDirectory(outputDir);

            using (FileStream input = new FileStream(filePath, FileMode.Open))
            {
                QarFile file = new QarFile();
                file.Read(input);
                foreach (var exportedFile in file.ExportFiles(input))
                {
                    iDir.WriteFile(exportedFile.FileName, exportedFile.DataStream); // doesn't bother checking if the file already exists, since dats don't often have pre-existing stuff to overwrite. saved roughly 30 seconds when unpacking texture3
                }
            }
        }
Ejemplo n.º 7
0
        public List <string> ReadArchive <T>(string filePath, string outputDir, bool condense) where T : ArchiveFile, new()
        {
            IDirectory    iDir      = new FileSystemDirectory(outputDir);
            List <string> fileNames = new List <string>();

            using (FileStream input = new FileStream(filePath, FileMode.Open))
            {
                T file = new T();
                file.Read(input);
                foreach (var exportedFile in file.ExportFiles(input))
                {
                    fileNames.Add(exportedFile.FileName);

                    string name = condense ? Path.GetFileName(exportedFile.FileName) : exportedFile.FileName;

                    string exportedFileFullName = Path.Combine(outputDir, name);
                    if (!File.Exists(exportedFileFullName))
                    {
                        iDir.WriteFile(name, exportedFile.DataStream);
                    }
                }
            }
            return(fileNames);
        }
Ejemplo n.º 8
0
        private static void ReadQarFile(string path)
        {
            string fileDirectory = Path.GetDirectoryName(path);
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(path);
            string outputDirectoryPath = Path.Combine(fileDirectory, fileNameWithoutExtension);
            string xmlOutputPath = Path.Combine(fileDirectory,
                string.Format("{0}.xml", Path.GetFileName(path)));
            IDirectory outputDirectory = new FileSystemDirectory(outputDirectoryPath);

            using (FileStream input = new FileStream(path, FileMode.Open))
            using (FileStream xmlOutput = new FileStream(xmlOutputPath, FileMode.Create))
            {
                QarFile qarFile = QarFile.ReadQarFile(input);
                qarFile.Name = Path.GetFileName(path);
                foreach (var exportedFile in qarFile.ExportFiles(input))
                {
                    Console.WriteLine(exportedFile.FileName);
                    outputDirectory.WriteFile(exportedFile.FileName, exportedFile.DataStream);
                }
                ArchiveSerializer.Serialize(xmlOutput, qarFile);
            }
        }
Ejemplo n.º 9
0
        public void Transfer(string GZg0sSrc, string MGODatSrc, string masterDir)
        {
            string workDir = "temp";

            try
            {
                OnSendFeedback("Reading dictionaries...");
                // READ DICTIONARIES
                ReadDictionaries();


                OnSendFeedback("Creating temp directory...");
                // CREATE WORK DIRECTORY
                string g0sWorkDir = Path.Combine(workDir, "texture6_gzs0_dat");
                Directory.CreateDirectory(g0sWorkDir);


                OnSendFeedback("Copying Ground Zeroes Archive...");
                // COPY G0S TO WORK DIRECTORY
                string GZg0sDst = Path.Combine(workDir, Path.GetFileName(GZg0sSrc));
                File.Copy(GZg0sSrc, GZg0sDst, true);


                OnSendFeedback("Extracting data_01.g0s...");
                // OPEN G0S
                IDirectory outputDirectory = new FileSystemDirectory(g0sWorkDir);
                using (FileStream input = new FileStream(GZg0sDst, FileMode.Open))
                {
                    GzsFile file = new GzsFile();
                    file.Name = Path.GetFileNameWithoutExtension(GZg0sDst);
                    file.Read(input);
                    foreach (var exportedFile in file.ExportFiles(input))
                    {
                        OnSendFeedback(exportedFile.FileName);
                        outputDirectory.WriteFile(exportedFile.FileName, exportedFile.DataStream);
                    }
                }


                OnSendFeedback("Copying texture6_gzs0.dat.xml...");
                // COPY REFERENCE XML TO WORK DIRECTORY
                string datXmlDstPath = Path.Combine(workDir, "texture6_gzs0.dat.xml");
                File.Copy("texture6_gzs0.dat.xml", datXmlDstPath, true);

                OnSendFeedback("Formatting texture6_gzs0.dat...");
                // WRITE DAT
                WriteArchive(datXmlDstPath);


                OnSendFeedback("Moving texture6_gzs0.dat...");
                // COPY DAT TO MASTER/
                string GZDatSrc = Path.Combine(workDir, "texture6_gzs0.dat");
                string GZDatDst = Path.Combine(masterDir, "texture6_gzs0.dat");
                File.Copy(GZDatSrc, GZDatDst, true);
                successfulTransfers.Add("texture6_gzs0.dat");


                OnSendFeedback("Copying MGO Archive...");
                // COPY MGO DAT TO MASTER/
                string MGODatDst = Path.Combine(masterDir, "texture5_mgo0.dat");
                File.Copy(MGODatSrc, MGODatDst, true);
                successfulTransfers.Add("texture5_mgo0.dat");
            }
            catch (Exception e)
            {
                errorOccurred = e.Message;
            }
            finally
            {
                DeleteDirectory(workDir);
            }
        }