gpt4 book ai didi

CreateFile 总是覆盖指定的文件

转载 作者:太空狗 更新时间:2023-10-29 17:08:58 26 4
gpt4 key购买 nike

我正在尝试记录我使用 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);
}
}

有人知道问题出在哪里吗?

谢谢;)

最佳答案

即使您正在打开现有文件,您也没有指定要附加到它。因此它作为通用写入打开,您最终会覆盖内容。您需要将 FILE_APPEND_DATA 标志传递给 CreateFile 方法。这最好通过使用包含 FILE_APPEND_DATA

FILE_GENERIC_WRITE 标志来完成
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))
{

关于CreateFile 总是覆盖指定的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9891794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com