Nug*_*get 7 c winapi visual-studio-2010
我正在尝试记录我使用Windows-API和C语言编写的服务所做的操作,因此我创建了一个日志文件系统.
问题是,在每次CreateFile调用时,都会覆盖该文件,而不是仅打开它并在文件末尾写入.
这是我的WriteInLogfile功能代码:
void WriteInLogFile(LPCTSTR log_string)
{
HANDLE hFile;
DWORD dBytesWritten;
if ((hFile = CreateFile(LOG_FILE_PATH, GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE
&& (GetLastError() == ERROR_FILE_NOT_FOUND))
{
if ((hFile = CreateFile(LOG_FILE_PATH, GENERIC_WRITE, 0, NULL,
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)
{
if (!WriteFile(hFile, log_string, strlen(log_string), &dBytesWritten, NULL))
aff_error("WriteInLogFile");
CloseHandle(hFile);
}
}
else
{
if (!WriteFile(hFile, log_string, strlen(log_string), &dBytesWritten, NULL))
aff_error("WriteInLogFile");
CloseHandle(hFile);
}
}
Run Code Online (Sandbox Code Playgroud)
有人知道问题的来源吗?
谢谢 ;)
即使您打开现有文件,也没有指定要附加到该文件.因此,它作为通用写入打开,并最终覆盖内容.您需要将FILE_APPEND_DATA标志传递给CreateFile方法.最好通过使用FILE_GENERIC_WRITE包含的标志来完成FILE_APPEND_DATA
if ((hFile = CreateFile(LOG_FILE_PATH, FILE_GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE
&& (GetLastError() == ERROR_FILE_NOT_FOUND))
{
Run Code Online (Sandbox Code Playgroud)