public void Init() { Proc = Process.GetCurrentProcess(); Id = Proc.Id; OutStream.Seek(0, SeekOrigin.Begin); OutStream.SetLength(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); }
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); }
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()); }
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); } }
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); }
internal void FinalizeFileHeader() { OutStream.Seek(6, SeekOrigin.Begin); this.Write(OutStream.Length); }
public Stream GetDecryptedStream() { OutStream.Seek(0, SeekOrigin.Begin); return(OutStream); }