几分钟后fopen无法打开文件

时间:2019-03-25 02:30:24

标签: c++

我想在文件中写一些日志。

这是我的代码:

FILE *writefile = fopen((Dir + FileName).data(), "at");
if (writefile)
{
    fprintf(writefile, log.data());
    fclose(writefile);
}

当我尝试写作时,它肯定可以正常工作。

此代码在联网系统中执行,但在无连接状态下执行。

因此,它会保持每秒写入日志“ Try Connct”。

This is the image what I want to write

我可以在控制台上看到这些日志。

在图像中,我尝试在11:10:00之前写日志。

但是在File中,直到11:06:00才写入。

我尝试调试我的代码,

This is the image in debugging

为什么会这样?

---添加---

我尝试打印错误。所以,我用了恐怖。

我收到错误消息:打开的文件太多。

但是为什么呢?显然,我已关闭文件,如您在我的代码中所见。

1 个答案:

答案 0 :(得分:0)

您的程序中存在资源泄漏。 open / dup / fopen / stream::open / pipe / connect / accept / {{1} }没有匹配的socket / close / fclose / ~stream的呼叫。

在发生stream::close泄漏的情况下,您可以通过以下方式之一避免泄漏:

不幸的是,没有找到此泄漏的简便方法。最好的方法是从一开始就避免使用它,方法是将FILEstd::streamRAIIstd::unique_ptr一起使用。由于代码不遵循此规则,因此唯一的出路是通过代码搜索fopen(及其他),并使其可能使用unique_ptr来使用RAII。