Возникла задача работать с данными, которые могут быть сжаты в gzip-архив. Соответственно, необходимо было определить, является ли файл gzip-архивом. Это довольно просто, gzip-архив можно определить по сигнатуре 1f 8b 08 00. Проверку целостности оставим на функцию распаковки, и если вышеуказанная сигнатура обнаружена в начале файла, то будем считать, что перед нами архив gzip.
Вот функция проверки:
public bool IsGZip(string filename)
{
byte[] buf = null;
try
{
buf = File.ReadAllBytes(filename);
}
catch
{
return false;
}
if (buf.Length < 4) return false;
if ((buf[0] == 0x1F) && (buf[1] == 0x8B) &&
(buf[2] == 0x08) && (buf[3] == 0x00))
return true;
return false;
}
Если файл очень большой, то File.ReadAllBytes не подойдет. Надо будет через StreamReader или FileStream прочесть только первые 4 байта:
public bool IsGZip(string filename)
{
int signlen = 4;
int count = 0;
byte[] buf = new byte[signlen];
FileStream readStream = null;
try
{
readStream = new FileStream(filename, FileMode.Open);
count = readStream.Read(buf, 0, signlen);
}
catch
{
return false;
}
readStream.Close();
if (count < 4) return false;
if ((buf[0] == 0x1F) && (buf[1] == 0x8B) &&
(buf[2] == 0x08) && (buf[3] == 0x00))
return true;
return false;
}