РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
527 of 1593 menu

Метод os.File.Seek

Метод os.File.Seek позволяет перемещать указатель текущей позиции в файле. Он принимает два параметра: первый — смещение в байтах (тип int64), второй — исходная точка отсчета (тип int), которая определяет, откуда производится смещение. Метод возвращает новую позицию указателя и ошибку, если операция не удалась.

Синтаксис

pos, err := file.Seek(offset, whence)

Параметр whence может принимать следующие константы из пакета io:

  • io.SeekStart (значение 0) — смещение относительно начала файла
  • io.SeekCurrent (значение 1) — смещение относительно текущей позиции
  • io.SeekEnd (значение 2) — смещение относительно конца файла

Пример "Seek от начала файла"

Давайте откроем файл и установим позицию на 10-й байт от начала:

package main import ( "fmt" "io" "os" ) func main() { file, err := os.Open("example.txt") if err != nil { fmt.Println("Error opening file:", err) return } defer file.Close() pos, err := file.Seek(10, io.SeekStart) if err != nil { fmt.Println("Seek error:", err) return } fmt.Println("New position:", pos) }

Результат выполнения кода:

"New position: 10"

Пример "Seek от текущей позиции"

Сместим указатель на 5 байт вперед относительно текущей позиции. Для этого сначала считаем несколько байт, чтобы изменить текущую позицию:

package main import ( "fmt" "io" "os" ) func main() { file, err := os.Open("example.txt") if err != nil { fmt.Println("Error opening file:", err) return } defer file.Close() // Read 5 bytes to move cursor buf := make([]byte, 5) _, err = file.Read(buf) if err != nil { fmt.Println("Read error:", err) return } pos, err := file.Seek(5, io.SeekCurrent) if err != nil { fmt.Println("Seek error:", err) return } fmt.Println("New position after Seek:", pos) }

Результат выполнения кода:

"New position after Seek: 10"

Пример "Seek от конца файла"

Переместим указатель на 5 байт назад от конца файла. Это полезно для чтения последних байтов файла:

package main import ( "fmt" "io" "os" ) func main() { file, err := os.Open("example.txt") if err != nil { fmt.Println("Error opening file:", err) return } defer file.Close() pos, err := file.Seek(-5, io.SeekEnd) if err != nil { fmt.Println("Seek error:", err) return } fmt.Println("Position from end:", pos) }

Результат выполнения кода:

"Position from end: 15"

Пример "Получение текущей позиции"

Чтобы узнать текущую позицию указателя без изменения, можно использовать Seek с нулевым смещением и параметром io.SeekCurrent:

package main import ( "fmt" "io" "os" ) func main() { file, err := os.Open("example.txt") if err != nil { fmt.Println("Error opening file:", err) return } defer file.Close() pos, err := file.Seek(0, io.SeekCurrent) if err != nil { fmt.Println("Seek error:", err) return } fmt.Println("Current position:", pos) }

Результат выполнения кода:

"Current position: 0"

Смотрите также

  • метод os.File.Read,
    который читает данные из файла с текущей позиции
  • метод os.File.Write,
    который записывает данные в файл с текущей позиции
  • интерфейс io.Seeker,
    который реализует метод Seek
  • метод os.File.Stat,
    который возвращает информацию о файле, включая его размер
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить