std::ofstream 打开成功,但是当我调用 write 时出现错误“没有这样的文件或目录”

问题描述 投票:0回答:2

我有这样的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系统中遇到了“没有这样的文件或目录”的错误。

我想知道什么原因会导致此错误发生,据我了解,删除已打开的文件实际上并不会删除它,而只是从文件系统中删除其链接。所以即使删除它后我仍然应该能够正常写入它。并且我尝试删除文件以测试这个错误没有发生。

那么还有其他原因会导致此错误吗?

我做了一个测试代码,当打开文件成功时,我删除了这个文件,尝试写入这个文件,写入成功并且没有发生任何错误。

c++ linux io filesystems ofstream
2个回答
0
投票
无论失败如何,

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


0
投票

您的 if 语句没有按照您的想法进行。目前,您只是检查

std::ofstream
是否不为 nullptr,很可能就是这种情况,但这并不意味着文件已成功打开。在对流进行操作之前,使用 std::ofstream::is_open 检查有效性。

© www.soinside.com 2019 - 2024. All rights reserved.