private void LoadBundleFile(string fullName, EndianBinaryReader reader, string parentPath = null) { var fileName = Path.GetFileName(fullName); Logger.Info("Loading " + fileName); try { var bundleFile = new BundleFile(reader, fullName); foreach (var file in bundleFile.fileList) { var dummyPath = Path.GetDirectoryName(fullName) + "\\" + file.fileName; LoadAssetsFromMemory(dummyPath, new EndianBinaryReader(file.stream), parentPath ?? fullName, bundleFile.versionEngine); } } catch { /*var str = $"Unable to load bundle file {fileName}"; * if (parentPath != null) * { * str += $" from {Path.GetFileName(parentPath)}"; * } * Logger.Error(str);*/ } finally { reader.Dispose(); } }
private void LoadBundleFile(FileReader reader, string originalPath = null) { Logger.Info("Loading " + reader.FileName); try { var bundleFile = new BundleFile(reader); foreach (var file in bundleFile.fileList) { var dummyPath = Path.Combine(Path.GetDirectoryName(reader.FullPath), file.fileName); var subReader = new FileReader(dummyPath, file.stream); if (subReader.FileType == FileType.AssetsFile) { LoadAssetsFromMemory(subReader, originalPath ?? reader.FullPath, bundleFile.m_Header.unityRevision); } else { resourceFileReaders[file.fileName] = subReader; //TODO } } } catch (Exception e) { var str = $"Error while reading bundle file {reader.FileName}"; if (originalPath != null) { str += $" from {Path.GetFileName(originalPath)}"; } Logger.Error(str, e); } finally { reader.Dispose(); } }
private static int ExtractBundleFile(string bundleFileName) { int extractedCount = 0; var extractPath = bundleFileName + "_unpacked\\"; Directory.CreateDirectory(extractPath); var reader = new EndianBinaryReader(File.OpenRead(bundleFileName)); var bundleFile = new BundleFile(reader); reader.Dispose(); if (bundleFile.fileList.Count > 0) { StatusStripUpdate($"Decompressing {Path.GetFileName(bundleFileName)} ..."); foreach (var memFile in bundleFile.fileList) { var filePath = extractPath + memFile.fileName.Replace('/', '\\'); if (!Directory.Exists(Path.GetDirectoryName(filePath))) { Directory.CreateDirectory(Path.GetDirectoryName(filePath)); } if (!File.Exists(filePath)) { File.WriteAllBytes(filePath, memFile.stream.ToArray()); memFile.stream.Dispose(); extractedCount += 1; } } } return(extractedCount); }
public static int ExtractBundleFile(string bundleFileName) { int extractedCount = 0; if (CheckFileType(bundleFileName, out var reader) == FileType.BundleFile) { StatusStripUpdate($"Decompressing {Path.GetFileName(bundleFileName)} ..."); var extractPath = bundleFileName + "_unpacked\\"; Directory.CreateDirectory(extractPath); var bundleFile = new BundleFile(reader); foreach (var memFile in bundleFile.fileList) { var filePath = extractPath + memFile.fileName.Replace('/', '\\'); if (!Directory.Exists(Path.GetDirectoryName(filePath))) { Directory.CreateDirectory(Path.GetDirectoryName(filePath)); } if (!File.Exists(filePath)) { StatusStripUpdate($"Extracting {Path.GetFileName(memFile.fileName)}"); extractedCount += 1; using (var file = File.Create(filePath)) { memFile.stream.WriteTo(file); memFile.stream.Close(); } } } } reader.Dispose(); return(extractedCount); }
private static int ExtractBundleFile(string bundleFileName, EndianBinaryReader reader) { StatusStripUpdate($"Decompressing {Path.GetFileName(bundleFileName)} ..."); var bundleFile = new BundleFile(reader, bundleFileName); reader.Dispose(); if (bundleFile.fileList.Count > 0) { var extractPath = bundleFileName + "_unpacked\\"; Directory.CreateDirectory(extractPath); return(ExtractStreamFile(extractPath, bundleFile.fileList)); } return(0); }
private void LoadBundleFile(string fullName, EndianBinaryReader reader, string parentPath = null) { var fileName = Path.GetFileName(fullName); Logger.Info("Decompressing " + fileName); var bundleFile = new BundleFile(reader, fullName); reader.Dispose(); foreach (var file in bundleFile.fileList) { var dummyPath = Path.GetDirectoryName(fullName) + "\\" + file.fileName; LoadAssetsFromMemory(dummyPath, new EndianBinaryReader(file.stream), parentPath ?? fullName, bundleFile.versionEngine); } }
private void LoadBundleFile(string fullName, EndianBinaryReader reader, string parentPath = null) { var fileName = Path.GetFileName(fullName); Logger.Info("Loading " + fileName); try { var bundleFile = new BundleFile(reader, fullName); foreach (var file in bundleFile.fileList) { var subReader = new EndianBinaryReader(file.stream); if (SerializedFile.IsSerializedFile(subReader)) { var dummyPath = Path.GetDirectoryName(fullName) + Path.DirectorySeparatorChar + file.fileName; if (bundleFile.fileList.Length == 1) { dummyPath = fullName; } LoadAssetsFromMemory(dummyPath, subReader, parentPath ?? fullName, bundleFile.m_Header.unityRevision, (bundleFile.fileList.Length == 1)); } else { resourceFileReaders.Add(file.fileName, subReader); } } } catch { /*var str = $"Unable to load bundle file {fileName}"; * if (parentPath != null) * { * str += $" from {Path.GetFileName(parentPath)}"; * } * Logger.Error(str);*/ } finally { reader.Dispose(); } }
private static void LoadBundleFile(string fullName, List <AssetsFile> assetsfileList, EndianBinaryReader reader, Dictionary <string, EndianBinaryReader> resourceFileReaders, string parentPath = null) { var fileName = Path.GetFileName(fullName); StatusStripUpdate("Decompressing " + fileName); var bundleFile = new BundleFile(reader, fullName); reader.Dispose(); foreach (var file in bundleFile.fileList) { if (!assetsfileListHash.Value.Contains(file.fileName.ToUpper())) { StatusStripUpdate("Loading " + file.fileName); var assetsFile = new AssetsFile(Path.GetDirectoryName(fullName) + "\\" + file.fileName, new EndianBinaryReader(file.stream)); if (assetsFile.valid) { assetsFile.parentPath = parentPath ?? fullName; if (assetsFile.fileGen == 6) //2.6.x and earlier don't have a string version before the preload table { //make use of the bundle file version assetsFile.m_Version = bundleFile.versionEngine; assetsFile.version = Regex.Matches(bundleFile.versionEngine, @"\d").Cast <Match>().Select(m => int.Parse(m.Value)).ToArray(); assetsFile.buildType = Regex.Replace(bundleFile.versionEngine, @"\d", "").Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries); } assetsfileList.Add(assetsFile); assetsfileListHash.Value.Add(assetsFile.upperFileName); } else { resourceFileReaders.Add(assetsFile.upperFileName, assetsFile.reader); } } } }
private void LoadBundleFile(string fullName, EndianBinaryReader reader, string parentPath = null) { var fileName = Path.GetFileName(fullName); Logger.Info("Loading " + fileName); try { var bundleFile = new BundleFile(reader, fullName); foreach (var file in bundleFile.fileList) { var subReader = new EndianBinaryReader(file.stream); if (SerializedFile.IsSerializedFile(subReader)) { var dummyPath = Path.GetDirectoryName(fullName) + Path.DirectorySeparatorChar + file.fileName; LoadAssetsFromMemory(dummyPath, subReader, parentPath ?? fullName, bundleFile.m_Header.unityRevision); } else { resourceFileReaders[file.fileName] = subReader; //TODO } } } catch (Exception e) { var str = $"Error while reading bundle file {fileName}"; if (parentPath != null) { str += $" from {Path.GetFileName(parentPath)}"; } Logger.Error(str, e); } finally { reader.Dispose(); } }