C++ fopen can';几分钟后我无法打开文件

C++ fopen can';几分钟后我无法打开文件,c++,C++,我想在文件中写一些日志 这是我的代码: FILE *writefile = fopen((Dir + FileName).data(), "at"); if (writefile) { fprintf(writefile, log.data()); fclose(writefile); } 当我第一次尝试写作时,它肯定会起作用 此代码在网络系统中执行,但在无连接状态下执行 所以,它每一秒都在写日志“Try Connct” 我可以在控制台上看到这些日志 在图中,我尝试在11:1

我想在文件中写一些日志

这是我的代码:

FILE *writefile = fopen((Dir + FileName).data(), "at");
if (writefile)
{
    fprintf(writefile, log.data());
    fclose(writefile);
}
当我第一次尝试写作时,它肯定会起作用

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

所以,它每一秒都在写日志“Try Connct”

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

在图中,我尝试在11:10:00时写入日志

但在文件中,它直到11:06:00才被写入

我试着调试我的代码

为什么会发生这种情况

---加成---

我试图打印错误。所以,我用了佩罗


我得到错误:打开的文件太多


但是为什么呢?很明显,我关闭了文件,正如您在代码中看到的那样。

您的程序中存在资源泄漏。有太多的
open
/
dup
/
fopen
/
stream::open
/
管道
/
连接
/
接受
/
套接字
调用而没有匹配的
关闭
/
/
/
关闭

文件
泄漏的情况下,可以通过以下方法之一避免泄漏:

  • 所有代码中使用流的
    而不是
    文件
    。当文件超出范围时,它将自动关闭该文件
  • 使用。这将在文件超出范围时自动关闭该文件

不幸的是,没有简单的方法找到这个漏洞。最好的方法是从一开始就避免它,一路使用
std::stream
std::unique_ptr
,和。由于代码没有遵循此规则,唯一的出路是通过代码搜索
fopen
(和其他),并使用RAII,可能带有
unique\u ptr

我不知道
fopen()
失败的原因,但是,您可以通过在
fopen()
返回NULL后立即检查
errno
的值(或者,更方便的是,在此时调用peror(“fopen”),查看打印的错误消息),来了解它失败的原因@JeremyFriesner好的,我将尝试打印错误。感谢
Dir
FileName
中的一个已更改。可能是你的防病毒软件挡住了我的去路。我得到一个错误:打开的文件太多了。但是为什么呢?显然,正如您在代码中看到的,我关闭了文件。您的错误可能只是代码中其他地方潜在问题的症状。试着创造一个新的世界,因为现在我们只能在黑暗中摸索,做猜测工作。另外,请不要截图错误消息、调试信息或代码。将任何文本信息包含为文本,而不是图像。谢谢