我有这样的cpp代码:
std::ofstream fs;
fs.open("a.txt", ios::out | ios::binary | ios::app);
if(fs)
{
if(!fs.write(buffer, buffer_size))
{
std::cout << strerror(errno) << std::endl;
}
}
但是我在linux系统中遇到了“没有这样的文件或目录”的错误。
我想知道什么原因会导致此错误发生,据我了解,删除已打开的文件实际上并不会删除它,而只是从文件系统中删除其链接。所以即使删除它后我仍然应该能够正常写入它。并且我尝试删除文件以测试这个错误没有发生。
那么还有其他原因会导致此错误吗?
我做了一个测试代码,当打开文件成功时,我删除了这个文件,尝试写入这个文件,写入成功并且没有发生任何错误。
fs.write()
都会返回指向fs
的指针。像布尔值一样测试不会产生有意义的结果。
至于到底是怎么回事,你可能想在调用
fs.is_open()
之后再调用fs.open()
:https://en.cppreference.com/w/cpp/io/basic_ofstream.
我怀疑您正在查看的
errno
值不是您感兴趣的。也许可以看看 fs.rdstate()
。 https://en.cppreference.com/w/cpp/io/basic_ios/rdstate
您的 if 语句没有按照您的想法进行。目前,您只是检查
std::ofstream
是否不为 nullptr,很可能就是这种情况,但这并不意味着文件已成功打开。在对流进行操作之前,使用 std::ofstream::is_open 检查有效性。