Beispiel #1
0
        public void CopyTo(IStream pstm, long cb, IntPtr pcbRead, IntPtr pcbWritten)
        {
            byte[] buffer;
            long   written = 0;
            int    read;
            int    count;

            if (cb != 0)
            {
                if (cb < 4096)
                {
                    count = (int)cb;
                }
                else
                {
                    count = 4096;
                }
                buffer = new byte[count];
                SetSizeToPosition();
                while (true)
                {
                    if ((read = baseStream.Read(buffer, 0, count)) == 0)
                    {
                        break;
                    }
                    pstm.Write(buffer, read, IntPtr.Zero);
                    written += read;
                    if (written >= cb)
                    {
                        break;
                    }
                    if (cb - written < 4096)
                    {
                        count = (int)(cb - written);
                    }
                }
            }

            if (pcbRead != IntPtr.Zero)
            {
                Marshal.WriteInt64(pcbRead, written);
            }
            if (pcbWritten != IntPtr.Zero)
            {
                Marshal.WriteInt64(pcbWritten, written);
            }
        }
Beispiel #2
0
		public void CopyTo(IStream pstm, long cb, IntPtr pcbRead, IntPtr pcbWritten)
		{
			byte[] buffer;
			long written = 0;
			int read;
			int count;

			if (cb != 0)
			{
				if (cb < 4096)
					count = (int)cb;
				else
					count = 4096;
				buffer = new byte[count];
				SetSizeToPosition();
				while (true)
				{
					if ((read = baseStream.Read(buffer, 0, count)) == 0)
						break;
					pstm.Write(buffer, read, IntPtr.Zero);
					written += read;
					if (written >= cb)
						break;
					if (cb - written < 4096)
						count = (int)(cb - written);
				}
			}

			if (pcbRead != IntPtr.Zero)
				Marshal.WriteInt64(pcbRead, written);
			if (pcbWritten != IntPtr.Zero)
				Marshal.WriteInt64(pcbWritten, written);
		}