コード例 #1
0
ファイル: UnixStream.cs プロジェクト: zzwwqqq/mono
        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);
        }
コード例 #2
0
        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);
        }