예제 #1
0
 public void Init()
 {
     Proc = Process.GetCurrentProcess();
     Id   = Proc.Id;
     OutStream.Seek(0, SeekOrigin.Begin);
     OutStream.SetLength(0);
 }
예제 #2
0
        private void WriteCompressDataBlockByteCount(long count, int beginActualOffset)
        {
            var currentStreamPosition = OutStream.Position;

            OutStream.Seek(beginActualOffset + 4, SeekOrigin.Begin); // NOTE 类继承过来的 Seek() 方法 偏移量居然不是 long 类型 = =,不要用它
            Write(count);
            OutStream.Seek(currentStreamPosition, SeekOrigin.Begin);
        }
예제 #3
0
 public WaveWriter(Stream Output, WaveFormat Format)
     : base(Output, Format)
 {
     if (!OutStream.CanSeek)
     {
         throw new ArgumentException("The stream must supports seeking if AudioDataSize is not supported", "Output");
     }
     OutStream.Seek(WaveHeaderSize + 8, SeekOrigin.Current);
 }
예제 #4
0
        public unsafe void TestReadWithStream()
        {
            int    number  = 30;
            IntPtr address = (IntPtr)(&number);

            Proc.Read(address, OutStream, 4);
            OutStream.Seek(0, SeekOrigin.Begin);
            Assert.AreEqual(number, Reader.ReadInt32());
        }
예제 #5
0
 private void write(byte[] srcData, int index, int size)
 {
     if (DataBlockPosition + size <= DataBlock.SizeOccupied)
     {
         //** overwrite data in Stream Position..
         Array.Copy(srcData, index, DataBlock.Data, DataBlockPosition, size);
         DataBlockPosition += size;
     }
     else if (DataBlock.SizeAvailable > 0)
     {
         int BytesToCopy = size;
         if (BytesToCopy <= DataBlock.SizeAvailable)
         {
             Array.Copy(srcData, index, DataBlock.Data, DataBlockPosition, BytesToCopy);
             DataBlockPosition      += BytesToCopy;
             DataBlock.SizeOccupied += BytesToCopy;
         }
         else
         {
             // Write Data spanning multiple blocks
             int BytesToWrite = DataBlock.SizeAvailable;
             Array.Copy(srcData, index, DataBlock.Data, DataBlockPosition, BytesToWrite);
             DataBlockPosition      = DataBlock.Data.Length;
             DataBlock.SizeOccupied = DataBlock.Data.Length;
             write(srcData, index + BytesToWrite, BytesToCopy - BytesToWrite);
         }
     }
     else
     {
         _dataBlock        = DataBlock.Extend();
         DataBlockPosition = 0;
         _logicalPosition += OutStream.Position;
         OutStream.SetLength(0);
         OutStream.Seek(0, SeekOrigin.Begin);
         do
         {
             if (_dataBlock.Data.Length < size)
             {
                 Array.Copy(srcData, index, _dataBlock.Data, 0, _dataBlock.Data.Length);
                 index += _dataBlock.Data.Length;
                 _dataBlock.SizeOccupied = _dataBlock.Data.Length;
                 size -= _dataBlock.Data.Length;
                 _dataBlock.Extend();
                 _dataBlock = _dataBlock.Next;
             }
             else
             {
                 Array.Copy(srcData, index, _dataBlock.Data, 0, size);
                 _dataBlock.SizeOccupied = size;
                 DataBlockPosition       = size;
                 break;
             }
         } while (size > 0);
     }
 }
예제 #6
0
        public unsafe void TestWriteWithStream()
        {
            int number = 30;

            Writer.Write(number);

            int    result  = 0;
            IntPtr address = (IntPtr)(&result);

            OutStream.Seek(0, SeekOrigin.Begin);
            Proc.Write(address, OutStream, 4);
            Assert.AreEqual(number, result);
        }
예제 #7
0
 internal void FinalizeFileHeader()
 {
     OutStream.Seek(6, SeekOrigin.Begin);
     this.Write(OutStream.Length);
 }
        public Stream GetDecryptedStream()
        {
            OutStream.Seek(0, SeekOrigin.Begin);

            return(OutStream);
        }