Linux.未打印到文件
Linux. Not printing to file
我只是HLDS服务器扩展元模块的编码模块。我编写了一个简单的实用程序函数,用于以%LOGNAME%_%DATE%.log格式编写日志在windows中,该函数运行良好,但在linux中,它创建文件,但什么也不写。首先,我试图搜索有关这方面的信息,但我没有找到解决方案。我试图取消文件句柄,将缓冲区设置为_IONBF模式,但没有任何帮助。非常感谢你读到这篇文章并帮助我解决这个问题。
void UTIL_LogToFile(char* szFileName, const char *fmt, ...)
{
va_list argptr;
va_start ( argptr, fmt );
vsnprintf ( g_szLogString, sizeof(g_szLogString), fmt, argptr );
va_end ( argptr );
char* szFilePath = new char[strlen(GlobalVariables::g_szDLLDirPath) + 12 + 30 + 1];
char* szLogFile = get_timestring("_%Y%m%d.log");
sprintf(szFilePath, "%slogs/%s%s", (GlobalVariables::g_szDLLDirPath), szFileName, szLogFile);
FILE* hFile = fopen(szFilePath, "a+");
delete[] szFilePath;
delete[] szLogFile;
if(hFile == NULL)
{
char szError[256];
sprintf(szError, "Error fopen: %sn", strerror(errno));
SERVER_PRINT(szError);
clearerr(hFile);
return;
}
fprintf(hFile, g_szLogString);
if(ferror(hFile))
{
char szError[256];
sprintf(szError, "Error fprintf: %sn", strerror(errno));
SERVER_PRINT(szError);
clearerr(hFile);
return;
}
fclose(hFile);
}
如果且仅当上一个函数失败,则应仅检查errno
。
如果上一次调用没有失败,则errno
的值为未定义。
因此,要正确检查错误,您必须首先检查fopen
调用是否返回空指针:
FILE* hFile = fopen(szFilePath, "a+");
if (hFile == nullptr)
{
perror(szFilePath);
return;
}
其他函数出现错误:更改的源代码:https://github.com/In-line/metamod_unprecacher/commit/08b2fabd03f838bee62913b0d2a4f4a4bbf1e6df
相关文章:
- 使用 getline 从输入文件打印时如何忽略空白行
- C++击球平均值程序使用输入/输出文件打印名称,平均值,最高/最低平均值时遇到麻烦
- 了解文件输入和输出,我可以写入文件,但无法从文件打印
- 如何将文件打印到其他文件夹
- 如何修复向量不从文件打印值
- 从文本文件打印后如何摆脱新线条,并在打印时摆脱结局空间
- 使用数组从文件打印整数
- 从文本文件打印 sfml 中的 2D 数组
- 从输入文件打印图形
- 从C 中的.txt文件打印出所选的数据
- 超载Ostream运算符从文件打印矩阵
- 为什么这不从TXT文件打印值
- 从文本文件打印字符串和整数 (C++)
- 为什么它只打印文本文件的一个单词,而不是将整个文本文件打印到html文件中
- C++从文本文件打印回文
- 无法从文件打印文本
- 尝试从输入文件打印,但打印最后一个输入两次
- 在 c++ 中从文件打印 2D 数组
- 从 postgresql 上运行的 c++ 文件打印
- 获取字符串从文本文件打印随机行时出现问题