Я хочу протестировать поведение "Нет такого файла" в моей программе. Для этого (наверняка) мне нужно некоторое имя файла, которое укажет на несуществующий файл.
Что такое метод для создания такого имени файла и гарантии его отсутствия в процессе тестирования? - У меня нет никаких идей, поэтому я практически ничего не пытался.
Я хочу реализовать его в C++, но, действительно, это не вопрос C++.
Это приемлемо для поиска решения, по крайней мере, для Linux.
Вероятно, нет возможности получить 100% -ную гарантию, но вы можете легко защитить от чего-либо, созданного другим пользователем, сначала создав каталог, в котором только у вас есть права доступа, а затем создайте там файл. После этого вы должны убедиться, что не делаете ничего, чего не хотите. (Как правило, в любое время вам понадобятся временные файлы, создание каталога, принадлежащего вам, и к которому только вы имеете доступ, - это хороший предупредительный ход.)
На самом деле невозможно создать имя файла, которое не будет существовать (условия гонки). Вы можете получить имя с помощью функции stdio 'char * tmpnam (char * s);' которые генерируют имя, которое трудно угадать.
Вы можете создать поток, чтобы избежать маловероятного случая, когда имя будет угадать:
class NoFStream : public std::fstream
{
public:
NoFStream(const char*, ios_base::openmode = ios_base::in | ios_base::out) {
setstate(ios_base::failbit);
}
void open(const char*, ios_base::openmode = ios_base::in | ios_base::out) {
setstate(ios_base::failbit);
}
};
int main()
{
NoFStream f("/tmp/file");
if(f >> std::ws) std::cout << "This will not succeed" << std::endl;
else std::cout << "Ok - it fails" << std::endl;
return 0;
}