【发布时间】:2009-10-12 10:49:45
【问题描述】:
如何将日志写入大小为 64KB 的文件(以允许记事本读取)。一旦文件达到 64KB,它应该开始创建另一个,另一个...... 文件名可以自动生成。
我尝试了以下代码
static int iCounter=1;
CString temp;
static CStdioFile f(L"c:\\Log1.txt", CFile::modeWrite | CFile::modeRead | CFile::modeCreate | CFile::modeNoTruncate);
int nlength = (int)f.GetLength();
if(nlength>(nMaxFileSize*1024))
{
//need to create a new file
f.Close();
iCounter++;
temp.Format(_T("%s%d%s"), "c:\\Log",iCounter, ".txt");
f.Open(temp,CFile::modeWrite | CFile::modeRead | CFile::modeCreate | CFile::modeNoTruncate);
}
f.SeekToEnd();
f.WriteString(str);
f.WriteString(L"\r\n");
我正在寻找更好的选择。
【问题讨论】:
-
我正在尝试使用 GetLength() 函数来获取磁盘上的文件大小以寻找更好的替代方案。
-
您是从哪里得出 64KB 限制的?我一直使用记事本打开更大的文件。这是一个蹩脚的文本编辑器,但打开几 MB 大的文件应该没有问题。或者,更好的是,开始使用许多可用的免费编辑器之一,它比记事本好得多。
-
尝试测量字符串的长度,而不是文件的长度,或者在刷新后测量 - 您的某些更改不会写入文件。 @eran 非常正确,notepad++ 是我的选择,但还有很多其他的存在。
-
@eran - 但在某些时候你可能想要限制你的日志文件大小 - 如果不是 64KB,那么可能是几百 MB 或 2GB。不管是同一个问题,只是频率不同。
标签: c++ logging file-io visual-c++