Я хотел бы проверить, относится ли строка name
к файлу, который я могу открыть и прочитать, поэтому это может быть обычный файл или символическая ссылка.
Я сначала использовал это:
std::ifstream in(name.c_str());
if (!in.is_open()) {
// throw exception!
}
но он не выдавал исключение, когда name
ссылался на имя каталога.
Теперь я использую это:
if (!fs::exists(name) || fs::is_directory(name)) {
// throw exception!
}
Но он (предположительно) не выдаст, если это символическая ссылка на каталог. То же самое верно и для этого:
if (!fs::is_regular_file(name) && !fs::is_symlink(name)) {
// throw exception!
}
Есть ли способ лучше?