This commit is contained in:
Perfare 2020-03-24 11:31:57 +08:00
parent ada26db659
commit e53eacef78
5 changed files with 21 additions and 24 deletions

View File

@ -9,12 +9,12 @@ namespace AssetStudio
public class AssetsManager public class AssetsManager
{ {
public List<SerializedFile> assetsFileList = new List<SerializedFile>(); public List<SerializedFile> assetsFileList = new List<SerializedFile>();
internal Dictionary<string, int> assetsFileIndexCache = new Dictionary<string, int>(); internal Dictionary<string, int> assetsFileIndexCache = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
internal Dictionary<string, EndianBinaryReader> resourceFileReaders = new Dictionary<string, EndianBinaryReader>(); internal Dictionary<string, EndianBinaryReader> resourceFileReaders = new Dictionary<string, EndianBinaryReader>(StringComparer.OrdinalIgnoreCase);
private List<string> importFiles = new List<string>(); private List<string> importFiles = new List<string>();
private HashSet<string> importFilesHash = new HashSet<string>(); private HashSet<string> importFilesHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
private HashSet<string> assetsFileListHash = new HashSet<string>(); private HashSet<string> assetsFileListHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
public void LoadFiles(params string[] files) public void LoadFiles(params string[] files)
{ {
@ -37,7 +37,7 @@ namespace AssetStudio
foreach (var file in files) foreach (var file in files)
{ {
importFiles.Add(file); importFiles.Add(file);
importFilesHash.Add(Path.GetFileName(file).ToUpper()); importFilesHash.Add(Path.GetFileName(file));
} }
Progress.Reset(); Progress.Reset();
@ -75,21 +75,21 @@ namespace AssetStudio
private void LoadAssetsFile(string fullName, EndianBinaryReader reader) private void LoadAssetsFile(string fullName, EndianBinaryReader reader)
{ {
var fileName = Path.GetFileName(fullName); var fileName = Path.GetFileName(fullName);
if (!assetsFileListHash.Contains(fileName.ToUpper())) if (!assetsFileListHash.Contains(fileName))
{ {
Logger.Info($"Loading {fileName}"); Logger.Info($"Loading {fileName}");
try try
{ {
var assetsFile = new SerializedFile(this, fullName, reader); var assetsFile = new SerializedFile(this, fullName, reader);
assetsFileList.Add(assetsFile); assetsFileList.Add(assetsFile);
assetsFileListHash.Add(assetsFile.upperFileName); assetsFileListHash.Add(assetsFile.fileName);
foreach (var sharedFile in assetsFile.m_Externals) foreach (var sharedFile in assetsFile.m_Externals)
{ {
var sharedFilePath = Path.GetDirectoryName(fullName) + "\\" + sharedFile.fileName; var sharedFilePath = Path.GetDirectoryName(fullName) + "\\" + sharedFile.fileName;
var sharedFileName = sharedFile.fileName; var sharedFileName = sharedFile.fileName;
if (!importFilesHash.Contains(sharedFileName.ToUpper())) if (!importFilesHash.Contains(sharedFileName))
{ {
if (!File.Exists(sharedFilePath)) if (!File.Exists(sharedFilePath))
{ {
@ -103,7 +103,7 @@ namespace AssetStudio
if (File.Exists(sharedFilePath)) if (File.Exists(sharedFilePath))
{ {
importFiles.Add(sharedFilePath); importFiles.Add(sharedFilePath);
importFilesHash.Add(sharedFileName.ToUpper()); importFilesHash.Add(sharedFileName);
} }
} }
} }
@ -123,8 +123,7 @@ namespace AssetStudio
private void LoadAssetsFromMemory(string fullName, EndianBinaryReader reader, string originalPath, string unityVersion = null) private void LoadAssetsFromMemory(string fullName, EndianBinaryReader reader, string originalPath, string unityVersion = null)
{ {
var fileName = Path.GetFileName(fullName); var fileName = Path.GetFileName(fullName);
var upperFileName = fileName.ToUpper(); if (!assetsFileListHash.Contains(fileName))
if (!assetsFileListHash.Contains(upperFileName))
{ {
try try
{ {
@ -135,7 +134,7 @@ namespace AssetStudio
assetsFile.SetVersion(unityVersion); assetsFile.SetVersion(unityVersion);
} }
assetsFileList.Add(assetsFile); assetsFileList.Add(assetsFile);
assetsFileListHash.Add(assetsFile.upperFileName); assetsFileListHash.Add(assetsFile.fileName);
} }
catch catch
{ {
@ -143,7 +142,7 @@ namespace AssetStudio
} }
finally finally
{ {
resourceFileReaders.Add(upperFileName, reader); resourceFileReaders.Add(fileName, reader);
} }
} }
} }

View File

@ -35,10 +35,10 @@ namespace AssetStudio
if (index == -2) if (index == -2)
{ {
var m_External = assetsFile.m_Externals[m_FileID - 1]; var m_External = assetsFile.m_Externals[m_FileID - 1];
var name = m_External.fileName.ToUpper(); var name = m_External.fileName;
if (!assetsFileIndexCache.TryGetValue(name, out index)) if (!assetsFileIndexCache.TryGetValue(name, out index))
{ {
index = assetsFileList.FindIndex(x => x.upperFileName == name); index = assetsFileList.FindIndex(x => x.fileName.Equals(name, StringComparison.OrdinalIgnoreCase));
assetsFileIndexCache.Add(name, index); assetsFileIndexCache.Add(name, index);
} }
} }
@ -91,8 +91,8 @@ namespace AssetStudio
public void Set(T m_Object) public void Set(T m_Object)
{ {
var name = m_Object.assetsFile.upperFileName; var name = m_Object.assetsFile.fileName;
if (string.Equals(assetsFile.upperFileName, name, StringComparison.Ordinal)) if (string.Equals(assetsFile.fileName, name, StringComparison.OrdinalIgnoreCase))
{ {
m_FileID = 0; m_FileID = 0;
} }
@ -119,7 +119,7 @@ namespace AssetStudio
if (!assetsFileIndexCache.TryGetValue(name, out index)) if (!assetsFileIndexCache.TryGetValue(name, out index))
{ {
index = assetsFileList.FindIndex(x => x.upperFileName == name); index = assetsFileList.FindIndex(x => x.fileName.Equals(name, StringComparison.OrdinalIgnoreCase));
assetsFileIndexCache.Add(name, index); assetsFileIndexCache.Add(name, index);
} }

View File

@ -34,7 +34,7 @@ namespace AssetStudio
{ {
var resourceFileName = Path.GetFileName(path); var resourceFileName = Path.GetFileName(path);
if (assetsFile.assetsManager.resourceFileReaders.TryGetValue(resourceFileName.ToUpper(), out var reader)) if (assetsFile.assetsManager.resourceFileReaders.TryGetValue(resourceFileName, out var reader))
{ {
reader.Position = offset; reader.Position = offset;
return reader.ReadBytes(size); return reader.ReadBytes(size);

View File

@ -13,7 +13,6 @@ namespace AssetStudio
public string fullName; public string fullName;
public string originalPath; public string originalPath;
public string fileName; public string fileName;
public string upperFileName;
public int[] version = { 0, 0, 0, 0 }; public int[] version = { 0, 0, 0, 0 };
public BuildType buildType; public BuildType buildType;
public Dictionary<long, Object> Objects; public Dictionary<long, Object> Objects;
@ -34,7 +33,6 @@ namespace AssetStudio
this.reader = reader; this.reader = reader;
this.fullName = fullName; this.fullName = fullName;
fileName = Path.GetFileName(fullName); fileName = Path.GetFileName(fullName);
upperFileName = fileName.ToUpper();
//ReadHeader //ReadHeader
header = new SerializedFileHeader(); header = new SerializedFileHeader();

View File

@ -101,7 +101,7 @@ namespace AssetStudioGUI
StatusStripUpdate("Building asset list..."); StatusStripUpdate("Building asset list...");
productName = string.Empty; productName = string.Empty;
var assetsNameHash = new HashSet<string>(); var assetsNameHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
var progressCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count); var progressCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count);
int j = 0; int j = 0;
Progress.Reset(); Progress.Reset();
@ -186,7 +186,7 @@ namespace AssetStudioGUI
} }
assetItem.SubItems.AddRange(new[] { assetItem.TypeString, assetItem.FullSize.ToString() }); assetItem.SubItems.AddRange(new[] { assetItem.TypeString, assetItem.FullSize.ToString() });
//处理同名文件 //处理同名文件
if (!assetsNameHash.Add((assetItem.TypeString + assetItem.Text).ToUpper())) if (!assetsNameHash.Add(assetItem.TypeString + assetItem.Text))
{ {
assetItem.Text += assetItem.UniqueID; assetItem.Text += assetItem.UniqueID;
} }
@ -217,7 +217,7 @@ namespace AssetStudioGUI
} }
item.Text = Path.GetDirectoryName(originalPath) + "\\" + Path.GetFileNameWithoutExtension(originalPath); item.Text = Path.GetDirectoryName(originalPath) + "\\" + Path.GetFileNameWithoutExtension(originalPath);
if (!assetsNameHash.Add((item.TypeString + item.Text).ToUpper())) if (!assetsNameHash.Add(item.TypeString + item.Text))
{ {
item.Text += item.UniqueID; item.Text += item.UniqueID;
} }