Seek
Seek у
BinaryWriter
вызывает Seek у
BaseStream.
После двух int вызов
Seek(0, SeekOrigin.Begin) позволяет
перезаписать первое число; второе остаётся
на месте. Перед чтением снова ставят
Position = 0.
Синтаксис
long pos = writer.Seek(offset, SeekOrigin.Begin);
Пример
Давайте перезаписать первый int:
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
MemoryStream ms = new MemoryStream();
BinaryWriter writer = new BinaryWriter(
ms, Encoding.UTF8, leaveOpen: true);
writer.Write(1);
writer.Write(2);
writer.Seek(0, SeekOrigin.Begin);
writer.Write(10);
ms.Position = 0;
BinaryReader reader = new BinaryReader(
ms, Encoding.UTF8, leaveOpen: true);
int first = reader.ReadInt32();
int second = reader.ReadInt32();
Console.WriteLine(first);
Console.WriteLine(second);
reader.Dispose();
writer.Dispose();
ms.Dispose();
}
}
Результат выполнения кода:
10
2
Пример
Давайте вернуть позицию после Seek:
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
MemoryStream ms = new MemoryStream();
BinaryWriter writer = new BinaryWriter(
ms, Encoding.UTF8, leaveOpen: true);
writer.Write(1);
writer.Write(2);
long res = writer.Seek(0, SeekOrigin.Begin);
Console.WriteLine(res);
writer.Dispose();
ms.Dispose();
}
}
Результат выполнения кода:
0
Пример
Давайте дописать после возврата в начало:
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
MemoryStream ms = new MemoryStream();
BinaryWriter writer = new BinaryWriter(
ms, Encoding.UTF8, leaveOpen: true);
writer.Write(1);
writer.Seek(0, SeekOrigin.Begin);
writer.Write(10);
ms.Position = 0;
BinaryReader reader = new BinaryReader(
ms, Encoding.UTF8, leaveOpen: true);
int res = reader.ReadInt32();
Console.WriteLine(res);
reader.Dispose();
writer.Dispose();
ms.Dispose();
}
}
Результат выполнения кода:
10
Смотрите также
-
Write,
запись передSeek -
ReadInt32,
проверка после перезаписи -
Stream,
общий поток байтов -
MemoryStream,
буфер для проверки