Ваш код в порядке.Поскольку вы пытаетесь создать каталог, OS
будет выполнять арбитраж между вашим процессом и другим процессом, пытающимся создать тот же файл, поэтому, если вы выиграете, вы владеете файлом, а в случае проигрыша вы получите ошибку.
Недавно я написал похожую функцию.Вы выбрасываете исключение или нет, зависит от того, как вы хотите использовать эту функцию.Вы можете, например, просто вернуть открытый или закрытый std::fstream
и использовать std::fstream::is_open
в качестве меры успеха или вернуть пустой путь при ошибке.
Поиск std :: filesystem ::create_directories вызовет свое собственное исключение, если вы не укажете параметр std::error_code
, поэтому вам не нужно выдавать собственное исключение:
std::filesystem::path tmp_dir_path {std::filesystem::temp_directory_path() /= std::tmpnam(nullptr)};
// Attempt to create the directory.
std::filesystem::create_directories(tmp_dir_path));
// If that failed an exception will have been thrown
// so no need to check or throw your own
// Directory successfully created.
return tmp_dir_path;