Прочитать на английском

Поделиться через


FileStream.Seek(Int64, SeekOrigin) Метод

Определение

Устанавливает текущее положение этого потока на заданное значение.

C#
public override long Seek (long offset, System.IO.SeekOrigin origin);

Параметры

offset
Int64

Указатель относительно начальной точки origin, от которой начинается поиск.

origin
SeekOrigin

Задает начальную, конечную или текущую позицию как опорную точку для offset, используя значение типа SeekOrigin.

Возвращаемое значение

Новая позиция в потоке.

Исключения

Ошибка ввода/вывода.

Поток не поддерживает поиск, например, если FileStream создан на основе вывода консоли или канала.

Попытка поиска выполняется до начала потока.

Методы были вызваны после закрытия потока.

Примеры

В следующем примере показано, как записать данные в файл в байтах, а затем проверить правильность записи данных.

C#
using System;
using System.IO;

class FStream
{
    static void Main()
    {
        const string fileName = "Test#@@#.dat";

        // Create random data to write to the file.
        byte[] dataArray = new byte[100000];
        new Random().NextBytes(dataArray);

        using(FileStream
            fileStream = new FileStream(fileName, FileMode.Create))
        {
            // Write the data to the file, byte by byte.
            for(int i = 0; i < dataArray.Length; i++)
            {
                fileStream.WriteByte(dataArray[i]);
            }

            // Set the stream position to the beginning of the file.
            fileStream.Seek(0, SeekOrigin.Begin);

            // Read and verify the data.
            for(int i = 0; i < fileStream.Length; i++)
            {
                if(dataArray[i] != fileStream.ReadByte())
                {
                    Console.WriteLine("Error writing data.");
                    return;
                }
            }
            Console.WriteLine("The data was written to {0} " +
                "and verified.", fileStream.Name);
        }
    }
}

В следующем примере текст считывается в обратном направлении, от конца файла до начала файла, используя различные SeekOrigin значения с методом Seek .

C#
using System;
using System.IO;

public class FSSeek
{
    public static void Main()
    {
        long offset;
        int nextByte;

        // alphabet.txt contains "abcdefghijklmnopqrstuvwxyz"
        using (FileStream fs = new FileStream(@"c:\temp\alphabet.txt", FileMode.Open, FileAccess.Read))
        {
            for (offset = 1; offset <= fs.Length; offset++)
            {
                fs.Seek(-offset, SeekOrigin.End);
                Console.Write((char)fs.ReadByte());
            }
            Console.WriteLine();

            fs.Seek(20, SeekOrigin.Begin);

            while ((nextByte = fs.ReadByte()) > 0)
            {
                Console.Write((char)nextByte);
            }
            Console.WriteLine();
        }
    }
}
// This code example displays the following output:
//
// zyxwvutsrqponmlkjihgfedcba
// uvwxyz

Комментарии

Этот метод переопределяет метод Stream.Seek.

Примечание

Используйте свойство , FileStream.CanSeek чтобы определить, поддерживает ли текущий экземпляр поиск. Дополнительные сведения см. в разделе Stream.CanSeek.

Вы можете искать любое расположение, превышающее длину потока. При поиске за пределами длины файла размер файла увеличивается. Данные, добавленные в конец файла, равны нулю.

Список распространенных операций с файлами и каталогами см. в разделе Общие задачи ввода-вывода.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

См. также раздел