Fast checking for file existance

This commit is contained in:
Paul Chote
2010-08-18 22:56:16 +12:00
parent 0c5fb4c6b0
commit 30ab5c33ea
4 changed files with 18 additions and 9 deletions

View File

@@ -36,5 +36,10 @@ namespace OpenRA.FileFormats
} }
public IEnumerable<uint> AllFileHashes() { return hashes; } public IEnumerable<uint> AllFileHashes() { return hashes; }
public bool Exists(string filename)
{
return hashes.Contains(PackageEntry.HashFilename(filename));
}
} }
} }

View File

@@ -122,15 +122,8 @@ namespace OpenRA.FileFormats
public static bool Exists(string filename) public static bool Exists(string filename)
{ {
foreach (var folder in mountedFolders) foreach (var folder in mountedFolders)
{ if (folder.Exists(filename))
var s = folder.GetContent(filename);
if (s != null)
{
s.Dispose();
return true; return true;
}
}
return false; return false;
} }

View File

@@ -30,5 +30,10 @@ namespace OpenRA.FileFormats
foreach( var filename in Directory.GetFiles( path, "*", SearchOption.TopDirectoryOnly ) ) foreach( var filename in Directory.GetFiles( path, "*", SearchOption.TopDirectoryOnly ) )
yield return PackageEntry.HashFilename( filename ); yield return PackageEntry.HashFilename( filename );
} }
public bool Exists(string filename)
{
return File.Exists(Path.Combine(path,filename));
}
} }
} }

View File

@@ -18,6 +18,7 @@ namespace OpenRA.FileFormats
public interface IFolder public interface IFolder
{ {
Stream GetContent(string filename); Stream GetContent(string filename);
bool Exists(string filename);
IEnumerable<uint> AllFileHashes(); IEnumerable<uint> AllFileHashes();
} }
@@ -143,6 +144,11 @@ namespace OpenRA.FileFormats
{ {
return index.Keys; return index.Keys;
} }
public bool Exists(string filename)
{
return index.ContainsKey(PackageEntry.HashFilename(filename));
}
} }
[Flags] [Flags]