Ошибка fs.ErrNotExist
Ошибка fs.ErrNotExist представляет собой стандартную ошибку,
которая возвращается функциями пакета io/fs при попытке доступа
к файлу или директории, которые не существуют в файловой системе.
Эта ошибка используется для проверки наличия файлов и корректной
обработки ситуаций, когда файл не найден.
Синтаксис
var ErrNotExist = errors.New("file does not exist")
Пример проверки ошибки при открытии файла
Давайте попробуем открыть несуществующий файл и проверим,
возвращает ли функция os.Open ошибку fs.ErrNotExist:
package main
import (
"fmt"
"io/fs"
"os"
)
func main() {
file, err := os.Open("nonexistent.txt")
if err != nil {
if err == fs.ErrNotExist {
fmt.Println("file does not exist")
} else {
fmt.Println("other error:", err)
}
return
}
defer file.Close()
fmt.Println("file opened successfully")
}
Результат выполнения кода:
"file does not exist"
Пример с использованием os.IsNotExist
Более надежный способ проверки ошибки fs.ErrNotExist -
использовать функцию os.IsNotExist, которая корректно
работает с обернутыми ошибками:
package main
import (
"fmt"
"os"
)
func main() {
_, err := os.Stat("missing_file.txt")
if err != nil {
if os.IsNotExist(err) {
fmt.Println("file or directory does not exist")
} else {
fmt.Println("other error:", err)
}
return
}
fmt.Println("file exists")
}
Результат выполнения кода:
"file or directory does not exist"
Пример сравнения с fs.ErrNotExist
При работе с функциями пакета os ошибка может быть обернута
в fs.PathError, поэтому прямое сравнение с fs.ErrNotExist
может не сработать. Рассмотрим этот случай:
package main
import (
"errors"
"fmt"
"io/fs"
"os"
)
func main() {
_, err := os.Open("no_such_file.txt")
if err != nil {
if errors.Is(err, fs.ErrNotExist) {
fmt.Println("file does not exist (using errors.Is)")
}
if err == fs.ErrNotExist {
fmt.Println("file does not exist (direct comparison)")
} else {
fmt.Println("direct comparison failed")
}
}
}
Результат выполнения кода:
"file does not exist (using errors.Is)"
"direct comparison failed"
Смотрите также
-
функцию
os.IsNotExist,
которая проверяет, указывает ли ошибка на отсутствие файла -
функцию
os.IsExist,
которая проверяет, указывает ли ошибка на существование файла -
функцию
os.Stat,
которая возвращает информацию о файле или директории -
функцию
os.IsPermission,
которая проверяет наличие ошибки доступа к файлу