在下面的代码中,我试图将进程的输出写入文件,然后读取刚刚放在那里的信息。如果我写入文件,关闭文件,等待几秒钟以使文件正常关闭,然后再次打开文件并从中读取,我可以正确地执行此操作。问题是我真的不想关闭文件只是为了重新打开它,如果我关闭它,我必须在那里放一个延迟因为我无法关闭它然后立即重新打开相同的文件或者我得到一个空白的结果。我的猜测是,因为文件没有关闭,句柄开始从写入停止的点读取。
HANDLE hLog = CreateFile("test.log",
GENERIC_READ | GENERIC_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hLog == INVALID_HANDLE_VALUE) {
return FALSE;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
ZeroMemory(&si, sizeof(STARTUPINFO));
HANDLE hCurOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetStdHandle(STD_OUTPUT_HANDLE, hLog);
BOOL bResult = CreateProcess(NULL,
"Test.exe",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi);
SetStdHandle(STD_OUTPUT_HANDLE, hCurOutput);
if (bResult == FALSE) {
return FALSE;
}
TCHAR data[1024] = {0};
DWORD dwBytesRead;
bResult = ReadFile(hLog, data, sizeof(data), &dwBytesRead, NULL);
std::cout << data << "\n";
CloseHandle(hLog);
return bResult;
我也只是坚持使用WinAPI。但每次我的ReadFile,它都是空白的,dwBytesRead是0.有没有办法重置我在文件中的当前位置,所以我可以从头开始阅读?