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); }
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); } }
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); } }
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); }
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); }
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 } } }
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); }
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); } }
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); } }