diff --git a/OpenRA.FileFormats/CompressedPackage.cs b/OpenRA.FileFormats/CompressedPackage.cs index 6bba49fa2d..4b9f553b6b 100644 --- a/OpenRA.FileFormats/CompressedPackage.cs +++ b/OpenRA.FileFormats/CompressedPackage.cs @@ -36,5 +36,10 @@ namespace OpenRA.FileFormats } public IEnumerable AllFileHashes() { return hashes; } + + public bool Exists(string filename) + { + return hashes.Contains(PackageEntry.HashFilename(filename)); + } } } diff --git a/OpenRA.FileFormats/FileSystem.cs b/OpenRA.FileFormats/FileSystem.cs index 90ee3ce801..f76689ef80 100644 --- a/OpenRA.FileFormats/FileSystem.cs +++ b/OpenRA.FileFormats/FileSystem.cs @@ -122,15 +122,8 @@ namespace OpenRA.FileFormats public static bool Exists(string filename) { foreach (var folder in mountedFolders) - { - var s = folder.GetContent(filename); - if (s != null) - { - s.Dispose(); - return true; - } - } - + if (folder.Exists(filename)) + return true; return false; } diff --git a/OpenRA.FileFormats/Folder.cs b/OpenRA.FileFormats/Folder.cs index b30ffa79d0..f76d41fa27 100644 --- a/OpenRA.FileFormats/Folder.cs +++ b/OpenRA.FileFormats/Folder.cs @@ -30,5 +30,10 @@ namespace OpenRA.FileFormats foreach( var filename in Directory.GetFiles( path, "*", SearchOption.TopDirectoryOnly ) ) yield return PackageEntry.HashFilename( filename ); } + + public bool Exists(string filename) + { + return File.Exists(Path.Combine(path,filename)); + } } } diff --git a/OpenRA.FileFormats/Package.cs b/OpenRA.FileFormats/Package.cs index 62805d7838..0d847890a3 100644 --- a/OpenRA.FileFormats/Package.cs +++ b/OpenRA.FileFormats/Package.cs @@ -18,6 +18,7 @@ namespace OpenRA.FileFormats public interface IFolder { Stream GetContent(string filename); + bool Exists(string filename); IEnumerable AllFileHashes(); } @@ -143,6 +144,11 @@ namespace OpenRA.FileFormats { return index.Keys; } + + public bool Exists(string filename) + { + return index.ContainsKey(PackageEntry.HashFilename(filename)); + } } [Flags]