mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-11-12 23:32:42 -05:00
Fixes for zip file reading
- Fixed path for split files - Fixed assetsFile loading from an archive
This commit is contained in:
@ -187,7 +187,7 @@ namespace AssetStudio
|
|||||||
return LoadFile(reader);
|
return LoadFile(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool LoadFile(FileReader reader)
|
private bool LoadFile(FileReader reader, bool fromZip = false)
|
||||||
{
|
{
|
||||||
if (reader == null)
|
if (reader == null)
|
||||||
return false;
|
return false;
|
||||||
@ -195,7 +195,7 @@ namespace AssetStudio
|
|||||||
switch (reader.FileType)
|
switch (reader.FileType)
|
||||||
{
|
{
|
||||||
case FileType.AssetsFile:
|
case FileType.AssetsFile:
|
||||||
return LoadAssetsFile(reader);
|
return LoadAssetsFile(reader, fromZip);
|
||||||
case FileType.BundleFile:
|
case FileType.BundleFile:
|
||||||
return LoadBundleFile(reader);
|
return LoadBundleFile(reader);
|
||||||
case FileType.WebFile:
|
case FileType.WebFile:
|
||||||
@ -214,7 +214,7 @@ namespace AssetStudio
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool LoadAssetsFile(FileReader reader)
|
private bool LoadAssetsFile(FileReader reader, bool fromZip)
|
||||||
{
|
{
|
||||||
if (!assetsFileListHash.Contains(reader.FileName))
|
if (!assetsFileListHash.Contains(reader.FileName))
|
||||||
{
|
{
|
||||||
@ -226,6 +226,8 @@ namespace AssetStudio
|
|||||||
CheckStrippedVersion(assetsFile);
|
CheckStrippedVersion(assetsFile);
|
||||||
assetsFileList.Add(assetsFile);
|
assetsFileList.Add(assetsFile);
|
||||||
assetsFileListHash.Add(assetsFile.fileName);
|
assetsFileListHash.Add(assetsFile.fileName);
|
||||||
|
if (fromZip)
|
||||||
|
return true;
|
||||||
|
|
||||||
foreach (var sharedFile in assetsFile.m_Externals)
|
foreach (var sharedFile in assetsFile.m_Externals)
|
||||||
{
|
{
|
||||||
@ -454,15 +456,16 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
|
|
||||||
// merge split files and load the result
|
// merge split files and load the result
|
||||||
foreach (string basePath in splitFiles)
|
for (var i = 0; i < splitFiles.Count; i++)
|
||||||
{
|
{
|
||||||
|
var basePath = splitFiles[i].Replace("\\", "/");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Stream splitStream = new MemoryStream();
|
Stream splitStream = new MemoryStream();
|
||||||
int i = 0;
|
var j = 0;
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
string path = $"{basePath}.split{i++}";
|
string path = $"{basePath}.split{j++}";
|
||||||
ZipArchiveEntry entry = archive.GetEntry(path);
|
ZipArchiveEntry entry = archive.GetEntry(path);
|
||||||
if (entry == null)
|
if (entry == null)
|
||||||
break;
|
break;
|
||||||
@ -473,7 +476,8 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
splitStream.Seek(0, SeekOrigin.Begin);
|
splitStream.Seek(0, SeekOrigin.Begin);
|
||||||
FileReader entryReader = new FileReader(basePath, splitStream);
|
FileReader entryReader = new FileReader(basePath, splitStream);
|
||||||
LoadFile(entryReader);
|
if (!LoadFile(entryReader, fromZip: true))
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@ -487,6 +491,8 @@ namespace AssetStudio
|
|||||||
Progress.Reset();
|
Progress.Reset();
|
||||||
foreach (ZipArchiveEntry entry in archive.Entries)
|
foreach (ZipArchiveEntry entry in archive.Entries)
|
||||||
{
|
{
|
||||||
|
if (entry.Length == 0)
|
||||||
|
continue;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string dummyPath = Path.Combine(Path.GetDirectoryName(reader.FullPath), reader.FileName, entry.FullName);
|
string dummyPath = Path.Combine(Path.GetDirectoryName(reader.FullPath), reader.FileName, entry.FullName);
|
||||||
@ -501,7 +507,9 @@ namespace AssetStudio
|
|||||||
streamReader.Position = 0;
|
streamReader.Position = 0;
|
||||||
|
|
||||||
FileReader entryReader = new FileReader(dummyPath, streamReader);
|
FileReader entryReader = new FileReader(dummyPath, streamReader);
|
||||||
LoadFile(entryReader);
|
if (!LoadFile(entryReader, fromZip: true))
|
||||||
|
break;
|
||||||
|
|
||||||
if (entryReader.FileType == FileType.ResourceFile)
|
if (entryReader.FileType == FileType.ResourceFile)
|
||||||
{
|
{
|
||||||
entryReader.Position = 0;
|
entryReader.Position = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user