Export (0) Print
Expand All

BinaryWriter.Seek Method

Sets the position within the current stream.

Namespace:  System.IO
Assemblies:   System.IO (in System.IO.dll)
  mscorlib (in mscorlib.dll)

public virtual long Seek(
	int offset,
	SeekOrigin origin
)

Parameters

offset
Type: System.Int32

A byte offset relative to origin.

origin
Type: System.IO.SeekOrigin

A field of SeekOrigin indicating the reference point from which the new position is to be obtained.

Return Value

Type: System.Int64
The position with the current stream.

ExceptionCondition
IOException

The file pointer was moved to an invalid location.

ArgumentException

The SeekOrigin value is invalid.

For a list of common I/O tasks, see Common I/O Tasks.

The following example writes a series of byte values to a file. The example uses Seek to move to various locations in the file, and then writes marker bytes by using the Write method.

using System;
using System.IO;
using System.Text;

public class BinReadWrite
{
    public static void Main()
    {
        string testfile = @"C:\temp\testfile.bin";

        // create a test file using BinaryWriter
        FileStream fs = File.Create(testfile);
        UTF8Encoding utf8 = new UTF8Encoding();

        BinaryWriter bw = new BinaryWriter(fs, utf8);
        // write a series of bytes to the file, each time incrementing 
        // the value from 0 - 127 
        int pos;

        for (pos = 0; pos < 128; pos++)
        {
            bw.Write((byte)pos);
        }

        // reset the stream position for the next write pass
        bw.Seek(0, SeekOrigin.Begin);
        // write marks in file with the value of 255 going forward 
        for (pos = 0; pos < 120; pos += 8)
        {
            bw.Seek(7, SeekOrigin.Current);
            bw.Write((byte)255);
        }

        // reset the stream position for the next write pass
        bw.Seek(0, SeekOrigin.End);
        // write marks in file with the value of 254 going backward 
        for (pos = 128; pos > 6; pos -= 6)
        {
            bw.Seek(-6, SeekOrigin.Current);
            bw.Write((byte)254);
            bw.Seek(-1, SeekOrigin.Current);
        }

        // now dump the contents of the file using the original file stream
        fs.Seek(0, SeekOrigin.Begin);
        byte[] rawbytes = new byte[fs.Length];
        fs.Read(rawbytes, 0, (int)fs.Length);

        int i = 0;
        foreach (byte b in rawbytes)
        {
             switch (b)
             {
                 case 254:
                 {
                     Console.Write("-%- ");
                 }
                 break;

                 case 255:
                 {
                     Console.Write("-*- ");
                 }
                 break;

                 default:
                 {
                     Console.Write("{0:d3} ", b);
                 }
                 break;
             }
             i++;
             if (i == 16)
             {
                 Console.WriteLine();
                 i = 0;
             }
        }
        fs.Close();
    }
}

//The output from the program is this: 
// 
// 000 001 -%- 003 004 005 006 -*- -%- 009 010 011 012 013 -%- -*- 
// 016 017 018 019 -%- 021 022 -*- 024 025 -%- 027 028 029 030 -*- 
// -%- 033 034 035 036 037 -%- -*- 040 041 042 043 -%- 045 046 -*- 
// 048 049 -%- 051 052 053 054 -*- -%- 057 058 059 060 061 -%- -*- 
// 064 065 066 067 -%- 069 070 -*- 072 073 -%- 075 076 077 078 -*- 
// -%- 081 082 083 084 085 -%- -*- 088 089 090 091 -%- 093 094 -*- 
// 096 097 -%- 099 100 101 102 -*- -%- 105 106 107 108 109 -%- -*- 
// 112 113 114 115 -%- 117 118 -*- 120 121 -%- 123 124 125 126 127

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0, 2.0, 1.0

Portable Class Library

Supported in: Portable Class Library

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

Supported in: Windows Phone Silverlight 8
Show:
© 2015 Microsoft