Как расширить файл с zlib.NET?

dataStream.flatMap (...). Print ()

не

dataStream.flatMap (...) dataStream.print ()

5
задан Ben Collins 9 October 2008 в 02:21
поделиться

4 ответа

Кажется, что я сделал ошибку предположения, что все виртуальные методы были переопределены, который не имел место. Я использовал zlib. ZInputStream. ReadByte (), который является просто наследованным Потоком. ReadByte (), который не делает никого, расширяются.

Я использовал zlib. ZInputStream. Читайте () вместо этого, и это работало как он, должен.

7
ответ дан 18 December 2019 в 07:32
поделиться

Кроме отказа использовать оператор "использования" для закрытия потока даже перед лицом исключения, которое смотрит хорошо мне. Данные определенно сжаты? Могут Вы для распаковки его с zlib на поле Linux?

Посмотрев на исходный код, это довольно ужасно - вызов к int Read(buffer, offset, length) закончит тем, что назвал его внутреннее int Read() метод length времена, например. Учитывая такой шаткий запуск, я не уверен, что доверял бы коду особенно в большой степени, но я буду ожидать, что это будет работать по крайней мере немного! Вы попытались использовать SharpZipLib?

7
ответ дан 18 December 2019 в 07:32
поделиться

Посмотрите на пример кода более тесно, он копирует данные от обычного Filestream до ZOutputStream. Распаковка должна происходить через тот слой.

private void decompressFile(string inFile, string outFile)
{
    System.IO.FileStream outFileStream = new System.IO.FileStream(outFile, System.IO.FileMode.Create);
    zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outFileStream);
    System.IO.FileStream inFileStream = new System.IO.FileStream(inFile, System.IO.FileMode.Open);          
    try
    {
        CopyStream(inFileStream, outZStream);
    }
    finally
    {
        outZStream.Close();
        outFileStream.Close();
        inFileStream.Close();
    }
}
0
ответ дан 18 December 2019 в 07:32
поделиться

Ниже кода мог помочь Вам парни. Инстанцируйте объекта и используйте функции.

public class FileCompressionUtility
{
    public FileCompressionUtility()
    {
    }

    public static void CopyStream(System.IO.Stream input, System.IO.Stream output)
    {
        byte[] buffer = new byte[2000];
        int len;
        while ((len = input.Read(buffer, 0, 2000)) > 0)
        {
            output.Write(buffer, 0, len);
        }
        output.Flush();
    }

    public void compressFile(string inFile, string outFile)
    {
        System.IO.FileStream outFileStream = new System.IO.FileStream(outFile, System.IO.FileMode.Create);
        zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outFileStream, zlib.zlibConst.Z_DEFAULT_COMPRESSION);
        System.IO.FileStream inFileStream = new System.IO.FileStream(inFile, System.IO.FileMode.Open);
        try
        {
            CopyStream(inFileStream, outZStream);
        }
        finally
        {
            outZStream.Close();
            outFileStream.Close();
            inFileStream.Close();
        }
    }

    public void uncompressFile(string inFile, string outFile)
    {
        int data = 0;
        int stopByte = -1;
        System.IO.FileStream outFileStream = new System.IO.FileStream(outFile, System.IO.FileMode.Create);
        zlib.ZInputStream inZStream = new zlib.ZInputStream(System.IO.File.Open(inFile, System.IO.FileMode.Open, System.IO.FileAccess.Read));
        while (stopByte != (data = inZStream.Read()))
        {
            byte _dataByte = (byte)data;
            outFileStream.WriteByte(_dataByte);
        }

        inZStream.Close();
        outFileStream.Close();
    }
}
2
ответ дан 18 December 2019 в 07:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: