Константа os.O_TRUNC

Константа os.O_TRUNC применяется совместно с флагами открытия файлов в функциях os.OpenFile и os.Create. При использовании этого флага существующий файл при открытии будет обрезан до нулевой длины, то есть все его содержимое будет удалено. Обычно os.O_TRUNC комбинируется с флагами os.O_WRONLY или os.O_RDWR, так как обрезка имеет смысл только при записи в файл. Если файл не существует, данный флаг не создает новый файл — для этого необходимо дополнительно указать os.O_CREATE.

Синтаксис

goos.OpenFile("filename", os.O_WRONLY|os.O_TRUNC, 0644)

Пример

Давайте откроем существующий файл для записи, обрезав его содержимое:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.OpenFile("data.txt", os.O_WRONLY|os.O_TRUNC, 0644)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer file.Close()

  _, err = file.WriteString("new content")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println("file truncated and written successfully")
}

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

go"file truncated and written successfully"

Пример

Давайте попробуем открыть несуществующий файл с флагом os.O_TRUNC без os.O_CREATE:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.OpenFile("missing.txt", os.O_WRONLY|os.O_TRUNC, 0644)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer file.Close()

  fmt.Println("file opened successfully")
}

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

go"Error: open missing.txt: no such file or directory"

Пример

Давайте создадим новый файл и сразу обрежем его до нулевой длины с помощью комбинации флагов os.O_CREATE и os.O_TRUNC:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.OpenFile("new.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer file.Close()

  _, err = file.WriteString("hello world")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println("file created and written successfully")
}

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

go"file created and written successfully"

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

  • константу os.O_CREATE,
    которая создает файл, если он не существует
  • константу os.O_APPEND,
    которая дописывает данные в конец файла
  • константу os.O_EXCL,
    которая используется с os.O_CREATE для создания файла только если его нет
  • функцию os.OpenFile,
    которая открывает файл с указанными флагами и правами доступа