Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Ionic Zip库的AddEntry(string,Stream)方法需要流类的哪些成员_C#_.net_Stream_Dotnetzip - Fatal编程技术网

C# Ionic Zip库的AddEntry(string,Stream)方法需要流类的哪些成员

C# Ionic Zip库的AddEntry(string,Stream)方法需要流类的哪些成员,c#,.net,stream,dotnetzip,C#,.net,Stream,Dotnetzip,另一个程序员为备份项目编写代码。他正在进行手术,无法询问有关他独自创建的项目的问题。在这个项目中,他利用了ionic zip库(特别是ionic.zip名称空间)。正在使用正确的文件名和文件大小创建zip。但是,这些文件已损坏。我已将问题追溯到流类,他正在发送Ionic Zip的AddEntry()方法: 我已经通过硬编码文件流并用它替换backupSource.StreamData来验证backupSource.StreamData是否存在问题。关于backupSource的一点。Stream

另一个程序员为备份项目编写代码。他正在进行手术,无法询问有关他独自创建的项目的问题。在这个项目中,他利用了ionic zip库(特别是ionic.zip名称空间)。正在使用正确的文件名和文件大小创建zip。但是,这些文件已损坏。我已将问题追溯到流类,他正在发送Ionic Zip的AddEntry()方法:

我已经通过硬编码文件流并用它替换backupSource.StreamData来验证backupSource.StreamData是否存在问题。关于backupSource的一点。StreamData。。。它是BackupSourceBase类的成员,该类派生自从Stream类派生的BackupFileBase类。BackupFileBase正在重写流类的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;
    }

我试图弄清楚Ionic Zip库在流类中看到了哪些成员。我真诚地认为问题在于被重写的Read()方法。老实说,我花了一个小时试图弄清楚他的代码在这个方法中做了什么,但我还是不太明白。我很乐意提供更多需要的信息或回答任何问题。我正在使用Visual Studio 2012.Net 4.0框架和Ionic.Zip库版本1.9.1.8


显然,我欢迎任何关于我的其他选择的原因的建议

你试过看图书馆的地图吗?是的,蒂姆,我看过。一个更有经验的程序员可能会很幸运地理解代码,但我发现,要想从代码中剔除并理解它,需要付出艰苦的努力。我是一名初级开发人员,工作不到6个月。谢谢你的回复。
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();

    }