Ich versuche, die Aktionen von einem Dienst protokolliert, die ich schrieb mit der Windows-API & C-Sprache, so dass ich ein Protokolldateisystem.CreateFile überschreibt immer die angegebene Datei
Das Problem besteht darin, dass bei jedem Aufruf von CreateFile die Datei überschrieben wird, anstatt sie nur zu öffnen und am Ende der Datei zu schreiben.
Hier ist der Code meiner WriteInLogfile
Funktion:
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);
}
}
jemand wissen Sie, wo das Problem herkommt?
Dank;)
Übrigens können Sie diesen Code vereinfachen, indem Sie 'OPEN_ALWAYS' verwenden, was' CreateFile' anweist, die Datei zu öffnen, falls sie existiert, oder die Datei zu erstellen, falls dies nicht der Fall ist. Dann müssen Sie nicht so viel von Ihrem Code duplizieren. –