Возникла задача работать с данными, которые могут быть сжаты в 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; }