Метод os.File.Sync

Метод os.File.Sync принудительно записывает все буферизированные данные файла на диск. Это гарантирует, что данные, записанные в файл, физически сохранены на постоянном носителе, а не находятся в буферах операционной системы. Метод вызывается для объекта файла, полученного при открытии или создании файла. Он возвращает ошибку, если операция синхронизации не удалась.

Синтаксис

goerr := file.Sync()

Пример

Давайте откроем файл, запишем в него данные и принудительно сбросим их на диск:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  // Create or open file for writing
  file, err := os.Create("example.txt")
  if err != nil {
    fmt.Println("Error creating file:", err)
    return
  }
  defer file.Close()

  // Write data to file
  _, err = file.WriteString("Hello, World!")
  if err != nil {
    fmt.Println("Error writing to file:", err)
    return
  }

  // Flush buffered data to disk
  err = file.Sync()
  if err != nil {
    fmt.Println("Error syncing file:", err)
    return
  }

  fmt.Println("Data successfully written and synced to disk")
}

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

go"Data successfully written and synced to disk"

Пример

Покажем ситуацию, когда синхронизация завершается с ошибкой, например, при попытке синхронизации файла, который уже закрыт:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  // Create a file
  file, err := os.Create("test.txt")
  if err != nil {
    fmt.Println("Error creating file:", err)
    return
  }

  // Write some data
  _, err = file.WriteString("some data")
  if err != nil {
    fmt.Println("Error writing to file:", err)
    return
  }

  // Close the file
  err = file.Close()
  if err != nil {
    fmt.Println("Error closing file:", err)
    return
  }

  // Try to sync the closed file
  err = file.Sync()
  if err != nil {
    fmt.Println("Sync error:", err)
    return
  }

  fmt.Println("Sync successful")
}

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

go"Sync error: file already closed"

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

  • метод os.File.Close,
    который закрывает файл и освобождает связанные с ним ресурсы
  • функцию os.WriteFile,
    которая записывает данные в файл и автоматически синхронизирует его
  • функцию os.Create,
    которая создает файл для записи
  • метод os.File.WriteString,
    который записывает строку в файл