mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-27 22:00:23 -04:00
improve file type check
This commit is contained in:
parent
2bcd9662be
commit
c8d08b2793
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user