public override long Seek(long offset, SeekOrigin origin) { AssertNotDisposed(); if (!CanSeek) { throw new NotSupportedException("The File Descriptor does not support seeking"); } Native.SeekFlags sf = Native.SeekFlags.SEEK_CUR; switch (origin) { case SeekOrigin.Begin: sf = Native.SeekFlags.SEEK_SET; break; case SeekOrigin.Current: sf = Native.SeekFlags.SEEK_CUR; break; case SeekOrigin.End: sf = Native.SeekFlags.SEEK_END; break; } long pos = Native.Syscall.lseek(fileDescriptor, offset, sf); if (pos == -1) { UnixMarshal.ThrowExceptionForLastError(); } return((long)pos); }
public override long Seek(long offset, SeekOrigin origin) { AssertNotDisposed(); if (!CanSeek) { throw new NotSupportedException("The File Stream does not support seeking"); } Native.SeekFlags sf = Native.SeekFlags.SEEK_CUR; switch (origin) { case SeekOrigin.Begin: sf = Native.SeekFlags.SEEK_SET; break; case SeekOrigin.Current: sf = Native.SeekFlags.SEEK_CUR; break; case SeekOrigin.End: sf = Native.SeekFlags.SEEK_END; break; default: throw new ArgumentException("origin"); } int r = Native.Stdlib.fseek(file, offset, sf); if (r != 0) { throw new IOException("Unable to seek", UnixMarshal.CreateExceptionForLastError()); } long pos = Native.Stdlib.ftell(file); if (pos == -1) { throw new IOException("Unable to get current file position", UnixMarshal.CreateExceptionForLastError()); } GC.KeepAlive(this); return(pos); }