Ошибка fs.ErrInvalid
Ошибка fs.ErrInvalid возвращается операциями пакета io/fs,
когда переданный аргумент не соответствует требованиям файловой системы.
Например, путь содержит недопустимые символы, или режим открытия файла
указан некорректно. Эта ошибка является частью набора стандартных ошибок
пакета fs и используется для единообразной обработки ситуаций
с невалидными параметрами.
Синтаксис
Ошибка fs.ErrInvalid определена как переменная в пакете io/fs:
var ErrInvalid = errors.New("invalid argument")
Для проверки наличия данной ошибки используйте сравнение с fs.ErrInvalid
или функцию errors.Is, так как она может быть обернута в другие ошибки.
Пример
Попробуем открыть файл с некорректным режимом (флаги не являются допустимой комбинацией):
package 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("Файл открыт успешно")
}
Результат выполнения кода (на некоторых системах):
"Ошибка: недопустимый аргумент"
Пример
Попробуем прочитать директорию, передав файл с недопустимым именем (путь содержит нулевой символ):
package 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("Директория прочитана успешно")
}
Результат выполнения кода:
"Ошибка: путь содержит недопустимые символы"
Пример
Попробуем создать файл с именем, которое превышает максимальную длину
(для некоторых файловых систем это также может вызвать fs.ErrInvalid):
package 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("Файл создан успешно")
}
Результат выполнения кода (зависит от ОС):
"Ошибка: недопустимое имя файла"
Смотрите также
-
ошибку
fs.ErrNotExist,
которая возникает, когда файл или директория не найдены -
ошибку
fs.ErrPermission,
которая сигнализирует о недостатке прав доступа -
ошибку
fs.ErrExist,
которая возвращается при попытке создать уже существующий файл -
тип
fs.PathError,
который содержит детальную информацию об ошибке пути