Tôi đang cố gắng ghi lại các hành động được thực hiện bởi dịch vụ tôi đã viết bằng ngôn ngữ C-Windows & C, vì vậy tôi đã tạo một hệ thống tệp nhật ký.CreateFile luôn ghi đè lên tập tin được chỉ định
Vấn đề là tại mỗi cuộc gọi CreateFile, tệp được ghi đè thay vì chỉ mở tệp và ghi vào cuối tệp.
Dưới đây là đoạn code của chức năng WriteInLogfile
tôi:
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);
}
}
Đừng ai biết nơi vấn đề xuất phát từ đâu?
cám ơn;)
Nhân tiện, bạn có thể đơn giản hóa mã này bằng cách sử dụng 'OPEN_ALWAYS', thông báo cho' CreateFile' để mở tệp nếu nó tồn tại hoặc tạo tệp nếu không. Sau đó, bạn sẽ không phải sao chép quá nhiều mã của bạn. –