.NET Framework Class Library
BinaryWriter.Seek Method
Sets the position within the current stream.
Assembly: mscorlib (in mscorlib.dll)
Syntax
Visual Basic
Public Overridable Function Seek ( _ offset As Integer, _ origin As SeekOrigin _ ) As Long
C#
public virtual long Seek( int offset, SeekOrigin origin )
Visual C++
public: virtual long long Seek( int offset, SeekOrigin origin )
F#
abstract Seek : offset:int * origin:SeekOrigin -> int64 override Seek : offset:int * origin:SeekOrigin -> int64
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.
Exceptions
| Exception | Condition |
|---|---|
| IOException |
The file pointer was moved to an invalid location. |
| ArgumentException |
The SeekOrigin value is invalid. |
Remarks
For a list of common I/O tasks, see Common I/O Tasks.
Examples
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.
Visual Basic
Imports System Imports System.IO Imports System.Text Public Class BinReadWrite Public Shared Sub Main() Dim testfile As String = "C:\testfile.bin" ' create a test file using BinaryWriter Dim fs As FileStream = File.Create(testfile) Dim utf8 As New UTF8Encoding() Dim bw As New BinaryWriter(fs, utf8) ' write a series of bytes to the file, each time incrementing ' the value from 0 - 127 Dim pos As Integer For pos = 0 to 127 bw.Write(CType(pos, Byte)) Next 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 To 119 Step 8 bw.Seek(7, SeekOrigin.Current) bw.Write(CType(255, Byte)) Next pos ' 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 To 7 Step -6 bw.Seek(-6, SeekOrigin.Current) bw.Write(CType(254, Byte)) bw.Seek(-1, SeekOrigin.Current) Next pos ' now dump the contents of the file using the original file stream fs.Seek(0, SeekOrigin.Begin) Console.WriteLine("Length: {0:d}", fs.Length) Dim rawbytes(fs.Length) As Byte fs.Read(rawbytes, 0, fs.Length) Console.WriteLine("Length: {0:d}", rawbytes.Length) Dim i As Integer = 0 For Each b As Byte In rawbytes Select b Case 254 Console.Write("-%- ") Case 255 Console.Write("-*- ") Case Else Console.Write("{0:d3} ", b) End Select i = i + 1 If i = 16 Then Console.WriteLine() i = 0 End If Next b fs.Close() End Sub End Class ' 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
C#
using System; using System.IO; using System.Text; public class BinReadWrite { public static void Main() { string testfile = @"C:\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
Visual C++
using namespace System; using namespace System::IO; using namespace System::Text; public ref class BinReadWrite { public: static void Main() { String^ testfile = "C:\\testfile.bin"; // create a test file using BinaryWriter FileStream^ fs = File::Create(testfile); UTF8Encoding^ utf8 = gcnew UTF8Encoding(); BinaryWriter^ bw = gcnew 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); array<Byte>^ rawbytes = gcnew array<Byte>(fs->Length); fs->Read(rawbytes, 0, (int)fs->Length); int i = 0; for each (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(); } }; int main() { BinReadWrite::Main(); } //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
Version Information
.NET Framework
Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0.NET Framework Client Profile
Supported in: 4, 3.5 SP1Portable Class Library
Supported in: Portable Class LibraryPlatforms
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
See Also