C# является ли файл gzip-архивом

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

Код на PasteBin
Код на PasteBin (вариант 2)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *