我想在我的程序中测试“没有这样的文件”行为。要做到这一点(当然)我需要一些文件名,这将指向不存在的文件。
生成此类文件名的方法是什么,并保证其不存在直到测试结束? - 我没有任何想法,所以我实际上什么也没做过。
我想用C ++实现它,但实际上,它不是特定于C ++的问题。
至少在Linux上找到解决方案是可以接受的。
答案 0 :(得分:2)
可能无法获得100%的保证,但你可以 轻松防止其他用户创建的任何内容 首先创建一个只有你拥有访问权限的目录, 然后在那里创建文件。在那之后,这取决于你 确保你不做任何你不想做的事情。 (作为一般 规则,任何时候你需要临时文件,创建一个目录 属于你,只有你有权访问,是一个很好的 预防性举措。)
答案 1 :(得分:0)
答案 2 :(得分:0)
实际上不可能创建一个不存在的文件名(竞争条件)。您可以使用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;
}