improve file type check

This commit is contained in:
Perfare 2020-03-26 02:17:48 +08:00
parent 2bcd9662be
commit c8d08b2793
3 changed files with 48 additions and 7 deletions

View File

@ -139,9 +139,6 @@ namespace AssetStudio
catch catch
{ {
//Logger.Error($"Unable to load assets file {fileName} from {Path.GetFileName(originalPath)}"); //Logger.Error($"Unable to load assets file {fileName} from {Path.GetFileName(originalPath)}");
}
finally
{
resourceFileReaders.Add(fileName, reader); resourceFileReaders.Add(fileName, reader);
} }
} }
@ -156,8 +153,16 @@ namespace AssetStudio
var bundleFile = new BundleFile(reader, fullName); var bundleFile = new BundleFile(reader, fullName);
foreach (var file in bundleFile.fileList) foreach (var file in bundleFile.fileList)
{ {
var dummyPath = Path.GetDirectoryName(fullName) + "\\" + file.fileName; var subReader = new EndianBinaryReader(file.stream);
LoadAssetsFromMemory(dummyPath, new EndianBinaryReader(file.stream), parentPath ?? fullName, bundleFile.versionEngine); if (SerializedFile.IsSerializedFile(subReader))
{
var dummyPath = Path.GetDirectoryName(fullName) + Path.DirectorySeparatorChar + file.fileName;
LoadAssetsFromMemory(dummyPath, subReader, parentPath ?? fullName, bundleFile.versionEngine);
}
else
{
resourceFileReaders.Add(file.fileName, subReader);
}
} }
} }
catch catch
@ -196,6 +201,9 @@ namespace AssetStudio
case FileType.WebFile: case FileType.WebFile:
LoadWebFile(dummyPath, fileReader); LoadWebFile(dummyPath, fileReader);
break; break;
case FileType.ResourceFile:
resourceFileReaders.Add(file.fileName, fileReader);
break;
} }
} }
} }

View File

@ -8,7 +8,8 @@ namespace AssetStudio
{ {
AssetsFile, AssetsFile,
BundleFile, BundleFile,
WebFile WebFile,
ResourceFile
} }
public static class ImportHelper public static class ImportHelper
@ -96,7 +97,14 @@ namespace AssetStudio
{ {
return FileType.WebFile; return FileType.WebFile;
} }
return FileType.AssetsFile; if (SerializedFile.IsSerializedFile(reader))
{
return FileType.AssetsFile;
}
else
{
return FileType.ResourceFile;
}
} }
} }
} }

View File

@ -330,5 +330,30 @@ namespace AssetStudio
return offset.ToString(); return offset.ToString();
} }
} }
public static bool IsSerializedFile(EndianBinaryReader reader)
{
var fileSize = reader.BaseStream.Length;
if (fileSize < 16)
{
return false;
}
var m_MetadataSize = reader.ReadUInt32();
var m_FileSize = reader.ReadUInt32();
if (m_FileSize != fileSize)
{
reader.Position = 0;
return false;
}
var m_Version = reader.ReadUInt32();
var m_DataOffset = reader.ReadUInt32();
if (m_DataOffset > fileSize)
{
reader.Position = 0;
return false;
}
reader.Position = 0;
return true;
}
} }
} }