Ошибка fs.ErrPermission

Ошибка fs.ErrPermission представляет собой значение ошибки, которое возвращается функциями пакета io/fs при попытке выполнить операцию с файлом, для которой у текущего процесса недостаточно прав доступа. Эта ошибка указывает на то, что операционная система запретила запрошенное действие из-за недостаточных разрешений. Обычно fs.ErrPermission используется в сочетании с функциями типа os.Open, os.ReadFile или os.Stat для проверки, была ли операция прервана из-за проблем с правами доступа.

Синтаксис

goerr == fs.ErrPermission

Пример

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

gopackage main

import (
  "fmt"
  "io/fs"
  "os"
)

func main() {
  file, err := os.Open("/root/secret.txt")
  if err != nil {
    if err == fs.ErrPermission {
      fmt.Println("Permission denied to open the file")
    } else {
      fmt.Println("Other error:", err)
    }
    return
  }
  defer file.Close()
  fmt.Println("File opened successfully")
}

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

go"Permission denied to open the file"

Пример

Давайте попробуем прочитать директорию, к которой у нас нет прав на чтение, и проверим ошибку с помощью функции os.IsPermission:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  entries, err := os.ReadDir("/root")
  if err != nil {
    if os.IsPermission(err) {
      fmt.Println("Permission denied to read directory")
    } else {
      fmt.Println("Other error:", err)
    }
    return
  }
  fmt.Println("Directory entries:", entries)
}

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

go"Permission denied to read directory"

Пример

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

gopackage main

import (
  "fmt"
  "io/fs"
  "os"
)

func main() {
  file, err := os.OpenFile("/etc/hosts", os.O_WRONLY|os.O_APPEND, 0644)
  if err != nil {
    if err == fs.ErrPermission {
      fmt.Println("Permission denied to write to file")
    } else {
      fmt.Println("Other error:", err)
    }
    return
  }
  defer file.Close()

  _, err = file.WriteString("new line")
  if err != nil {
    if err == fs.ErrPermission {
      fmt.Println("Permission denied during write operation")
    } else {
      fmt.Println("Other error:", err)
    }
    return
  }
  fmt.Println("Data written successfully")
}

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

go"Permission denied to write to file"

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

  • функцию os.IsPermission,
    которая является удобной оберткой для проверки ошибок доступа
  • ошибку os.ErrPermission,
    которая является синонимом fs.ErrPermission
  • ошибку os.ErrNotExist,
    которая указывает на отсутствие файла
  • функцию os.OpenFile,
    которая открывает файл с указанными флагами и правами