public IEnumerable <(string fileName, MpqLocale locale, Stream stream)> EnumerateFiles(string path) { if (Directory.Exists(path)) { var pathPrefixLength = path.Length + (path.EndsWith(@"\", StringComparison.Ordinal) ? 0 : 1); foreach (var file in Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories)) { var fileName = new FileInfo(file).ToString().Substring(pathPrefixLength); // var memoryStream = new MemoryStream(); // File.OpenRead(file).CopyTo(memoryStream); var locale = MpqLocaleProvider.GetPathLocale(fileName, out var filePath); yield return(filePath, locale, File.OpenRead(file)); } } }
public static IEnumerable <(string fileName, MpqLocale locale, Stream stream)> EnumerateFiles(string path) { if (File.Exists(path)) { // Assume file at path is an mpq archive. var archive = MpqArchive.Open(path); var listfile = archive.OpenFile(ListFile.Key); using (var reader = new StreamReader(listfile)) { while (!reader.EndOfStream) { var fileName = reader.ReadLine(); var memoryStream = new MemoryStream(); archive.OpenFile(fileName).CopyTo(memoryStream); memoryStream.Position = 0; yield return(fileName, MpqLocale.Neutral, memoryStream); } } archive.Dispose(); } else if (Directory.Exists(path)) { var pathPrefixLength = path.Length + (path.EndsWith("\\") ? 0 : 1); foreach (var file in Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories)) { var fileName = new FileInfo(file).ToString().Substring(pathPrefixLength); // var memoryStream = new MemoryStream(); // File.OpenRead(file).CopyTo(memoryStream); var locale = MpqLocaleProvider.GetPathLocale(fileName, out var filePath); yield return(filePath, locale, File.OpenRead(file)); } } }