Stream.Seek 方法是C#中用于设置当前流内部的位置指针的方法。在C#中,Stream是一个抽象类,代表字节流的基类。所有字节流的实现都继承自Stream类。Stream.Seek 方法可以用于设置流的读写起始位置,使得接下来的读写操作起始于设置的位置。
Stream.Seek 方法的使用方法非常简单。它接受两个参数,第一个参数表示需要偏移的字节数,第二个参数是基准点(SeekOrigin),它代表着偏移量的起始点。基准点为一个 SeekOrigin 枚举值,包括Begin、Current、End。分别表示文件的开头,当前位置,文件的结尾。
以下是Stream.Seek 方法的完整签名:
public virtual long Seek(long offset, SeekOrigin origin);
偏移量 offset 可以为正数或负数。当基准点为Begin时,偏移量表示在文件开头偏移多少个字节;当基准点为Current时,偏移量表示相对于当前读写位置的偏移量;当基准点为End时,偏移量表示相对于文件结尾的偏移量。
以下是设置当前读写位置的示例:
using System;
using System.IO;
class Program
{
public static void Main()
{
string path = @"sample.txt";
using (FileStream fs = new FileStream(path, FileMode.Open))
{
fs.Seek(5, SeekOrigin.Begin);
byte[] buffer = new byte[1024];
fs.Read(buffer, 0, buffer.Length);
Console.WriteLine(System.Text.Encoding.Default.GetString(buffer));
}
Console.ReadKey();
}
}
上述示例中,我们首先获得一个文件流,将读写位置设置到文件开头的第5个字节处,然后使用Read方法读取一定量的字节数据。
以下是设置当前写位置的示例:
using System;
using System.IO;
class Program
{
public static void Main()
{
string path = @"sample.txt";
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
{
fs.Seek(0, SeekOrigin.End);
byte[] buffer = System.Text.Encoding.UTF8.GetBytes("Hello World");
fs.Write(buffer, 0, buffer.Length);
}
Console.WriteLine("Write data done!");
Console.ReadKey();
}
}
上述示例中,我们打开一个文件流并将写位置设置到文件结尾,然后用Write方法写入一些数据。
需要特别注意的是,当设置读写位置时,如果设置位置超出了流的边界,则会抛出System.IO.IOException异常。因此,在使用 Stream.Seek 方法时应格外小心。