mirror of
https://github.com/crskycode/GARbro.git
synced 2024-11-23 21:55:34 +08:00
added static class implementing string extension methods.
methods check if file name ends with specified extensions.
This commit is contained in:
parent
2fd4d2cf7d
commit
a4bd5caf05
@ -93,6 +93,66 @@ namespace GameRes.Formats
|
||||
}
|
||||
}
|
||||
|
||||
public static class StringExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Check if <paramref name="filename"/> has specified extension <param name="ext"/>.
|
||||
/// </summary>
|
||||
public static bool HasExtension (this string filename, string ext)
|
||||
{
|
||||
bool ext_is_empty = string.IsNullOrEmpty (ext);
|
||||
if (!ext_is_empty && '.' == ext[0])
|
||||
return filename.EndsWith (ext, StringComparison.InvariantCultureIgnoreCase);
|
||||
int ext_start = GetExtensionIndex (filename);
|
||||
// filename extension length
|
||||
int l_ext_length = filename.Length - ext_start;
|
||||
if (ext_is_empty)
|
||||
return 0 == l_ext_length;
|
||||
return (l_ext_length == ext.Length
|
||||
&& filename.EndsWith (ext, StringComparison.InvariantCultureIgnoreCase));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check if filename ends with any of the extensions from the <paramref name="ext_list"/>.
|
||||
/// </summary>
|
||||
public static bool HasAnyOfExtensions (this string filename, params string[] ext_list)
|
||||
{
|
||||
int ext_start = GetExtensionIndex (filename);
|
||||
int l_ext_length = filename.Length - ext_start;
|
||||
foreach (string ext in ext_list)
|
||||
{
|
||||
if (string.IsNullOrEmpty (ext) || "." == ext)
|
||||
{
|
||||
if (0 == l_ext_length)
|
||||
return true;
|
||||
}
|
||||
else if ('.' == ext[0] || l_ext_length == ext.Length)
|
||||
{
|
||||
if (filename.EndsWith (ext, StringComparison.InvariantCultureIgnoreCase))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
internal static int GetExtensionIndex (string filename)
|
||||
{
|
||||
int name_start = filename.LastIndexOfAny (VFS.PathSeparatorChars);
|
||||
if (-1 == name_start)
|
||||
name_start = 0;
|
||||
else
|
||||
name_start++;
|
||||
if (filename.Length == name_start) // path ends with '\'
|
||||
return name_start;
|
||||
|
||||
int ext_start = filename.LastIndexOf ('.', filename.Length-1, filename.Length - name_start);
|
||||
if (-1 == ext_start)
|
||||
return filename.Length;
|
||||
else
|
||||
return ext_start + 1;
|
||||
}
|
||||
}
|
||||
|
||||
public class HuffmanDecoder
|
||||
{
|
||||
byte[] m_src;
|
||||
|
Loading…
Reference in New Issue
Block a user