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
中的一个已更改。可能是你的防病毒软件挡住了我的去路。我得到一个错误:打开的文件太多了。但是为什么呢?显然,正如您在代码中看到的,我关闭了文件。您的错误可能只是代码中其他地方潜在问题的症状。试着创造一个新的世界,因为现在我们只能在黑暗中摸索,做猜测工作。另外,请不要截图错误消息、调试信息或代码。将任何文本信息包含为文本,而不是图像。谢谢