Сравнение EEXIST и EISDIR — разберитесь в различиях, причинах и исправлениях.
EEXISTОперация создания файла завершилась неудачей, поскольку файл с указанным именем уже существует.
Операция, требующая отсутствия файла, была выполнена над уже существующим файлом. Это происходит при использовании флагов O_CREAT | O_EXCL в open(), при вызове mkdir() для существующего каталога или при создании символической ссылки на уже существующий объект.
Проверяйте существование файла перед его созданием. Используйте O_CREAT без O_EXCL, если перезапись допустима. При необходимости предварительно удалите существующий файл.
Операция не разрешена для каталога, однако целевой путь является каталогом.
Была предпринята попытка выполнить операцию, специфичную для файлов (например, открыть для записи или вызвать unlink), над каталогом.
Используйте операции, предназначенные для каталогов: rmdir() или opendir() вместо файловых операций. Для удаления каталога вместе с содержимым используйте rm -r.