CreateFile始终覆盖指定的文件

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)

有人知道问题的来源吗?

谢谢 ;)

Jar*_*Par 6

即使您打开现有文件,也没有指定要附加到该文件.因此,它作为通用写入打开,并最终覆盖内容.您需要将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)