Ionic Zip库为其AddEntry(字符串,流)方法需要Stream类的哪些成员

时间:2013-06-21 17:24:02

标签: c# .net stream dotnetzip

另一位程序员为备份项目编写代码。他外出接受手术,无法询问有关他独自制作的项目的问题。在项目中,他使用离子zip库(特别是Ionic.Zip命名空间。)使用正确的文件名和文件大小创建zip。但是,文件已损坏。我已经将问题追溯到他发送Ionic Zip的AddEntry()方法的流类:

zip.AddEntry(backupSource.FullPath, backupSource.StreamData);
zip.Save();

我已经通过硬编码文件流并用它替换backupSource.StreamData来验证backupSource.StreamData是个问题。关于backupSource.StreamData的一点内容......它是BackupSourceBase类的成员,它派生自一个派生自Stream类的BackupFileBase类。 BackupFileBase重写了Stream类的Read()和Write()方法。这是代码:

public override int Read(byte[] buffer, int offset, int count)
    {
        byte[] internalBuffer = new byte[count];

        GCHandle pinnedArray = GCHandle.Alloc(internalBuffer, GCHandleType.Pinned);
        IntPtr ptr = pinnedArray.AddrOfPinnedObject();
        uint lpNumberOfBytesRead = 0;

        bool ret = Kernel32.BackupRead(FileHandle.DangerousGetHandle(), ptr, (uint)count, out lpNumberOfBytesRead, false, true, ref lpContext);
        int err = Marshal.GetLastWin32Error();


        Array.Copy(internalBuffer, 0, buffer, offset, lpNumberOfBytesRead);
        pinnedArray.Free();

        return (int)lpNumberOfBytesRead;
    }

    public override long Seek(long offset, SeekOrigin origin)
    {
        int fileLow = LoWord(offset);
        int fileHigh = HiWord(offset);
        Kernel32.SetFilePointer(FileHandle, fileLow, out fileHigh, origin);
        return Position;
    }

public override void Write(byte[] buffer, int offset, int count)
    {
        byte[] internalBuffer = new byte[count];
        Array.Copy(buffer, offset, internalBuffer, 0, count);
        GCHandle pinnedArray = GCHandle.Alloc(internalBuffer, GCHandleType.Pinned);
        IntPtr ptr = pinnedArray.AddrOfPinnedObject();
        uint lpNumberOfBytesWritten = 0;

        bool ret = Kernel32.BackupWrite(FileHandle.DangerousGetHandle(), ptr, (uint)count, out lpNumberOfBytesWritten, false, true, ref lpContext);

        pinnedArray.Free();

    }

我试图弄清楚Ionic Zip库在Stream类中看到的成员。我真诚地相信问题是被覆盖的Read()方法。说实话,我花了一个小时试图找出他的代码在该方法中做了什么,但是并没有完全明白。我很乐意提供所需的更多信息或回答任何问题。我正在使用Visual Studio 2012 .Net 4.0框架和Ionic.Zip库版本1.9.1.8

显然,我欢迎任何可能导致我的选择的建议。

0 个答案:

没有答案
相关问题