Ошибка fs.ErrInvalid

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

Синтаксис

Ошибка fs.ErrInvalid определена как переменная в пакете io/fs:

govar ErrInvalid = errors.New("invalid argument")

Для проверки наличия данной ошибки используйте сравнение с fs.ErrInvalid или функцию errors.Is, так как она может быть обернута в другие ошибки.

Пример

Попробуем открыть файл с некорректным режимом (флаги не являются допустимой комбинацией):

gopackage main

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

func main() {
  // Некорректный режим: комбинация O_CREATE и O_TRUNC без O_RDWR
  // намеренно неверна для данной ОС
  file, err := os.OpenFile("test.txt", os.O_CREATE|os.O_TRUNC, 0644)
  if err != nil {
    if errors.Is(err, fs.ErrInvalid) {
      fmt.Println("Ошибка: недопустимый аргумент")
    } else {
      fmt.Println("Другая ошибка:", err)
    }
    return
  }
  defer file.Close()
  fmt.Println("Файл открыт успешно")
}

Результат выполнения кода (на некоторых системах):

go"Ошибка: недопустимый аргумент"

Пример

Попробуем прочитать директорию, передав файл с недопустимым именем (путь содержит нулевой символ):

gopackage main

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

func main() {
  // Имя файла с недопустимым символом (null byte)
  invalidPath := "test\x00.txt"
  _, err := os.ReadDir(invalidPath)
  if err != nil {
    if errors.Is(err, fs.ErrInvalid) {
      fmt.Println("Ошибка: путь содержит недопустимые символы")
    } else {
      fmt.Println("Другая ошибка:", err)
    }
    return
  }
  fmt.Println("Директория прочитана успешно")
}

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

go"Ошибка: путь содержит недопустимые символы"

Пример

Попробуем создать файл с именем, которое превышает максимальную длину (для некоторых файловых систем это также может вызвать fs.ErrInvalid):

gopackage main

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

func main() {
  // Создаем очень длинное имя файла (255 символов)
  longName := strings.Repeat("a", 300) + ".txt"
  _, err := os.Create(longName)
  if err != nil {
    if errors.Is(err, fs.ErrInvalid) {
      fmt.Println("Ошибка: недопустимое имя файла")
    } else if os.IsNotExist(err) {
      fmt.Println("Ошибка: файл не существует")
    } else if os.IsPermission(err) {
      fmt.Println("Ошибка: недостаточно прав")
    } else {
      fmt.Println("Другая ошибка:", err)
    }
    return
  }
  fmt.Println("Файл создан успешно")
}

Результат выполнения кода (зависит от ОС):

go"Ошибка: недопустимое имя файла"

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

  • ошибку fs.ErrNotExist,
    которая возникает, когда файл или директория не найдены
  • ошибку fs.ErrPermission,
    которая сигнализирует о недостатке прав доступа
  • ошибку fs.ErrExist,
    которая возвращается при попытке создать уже существующий файл
  • тип fs.PathError,
    который содержит детальную информацию об ошибке пути