我有一个使用CreateFile()和WriteFile()创建的面向行的文本文件(Unicode)。
使用ReadFile()将该文件作为二进制流读取非常简单,但需要进行额外的低级处理才能将其分解为行。
是否有为我这样做的Win32功能?
再次请注意,它是'C'(而不是C ++),我不想使用POSIX / ANSI C函数,例如readline()。
如果上述问题的答案是否定的,那么使用原生Win32 C函数完成读取面向行的文本文件的“最短代码”是什么?例如使用ReadFile(),StrChr()等
感谢。
答案 0 :(得分:4)
AFAIK没有win32函数可以逐行读取文件。
答案 1 :(得分:1)
这是一个功能框架,可读取整个文件并支持UNICODE:
void MyReadFile(wchar_t *filename)
{
HANDLE hFile;
DWORD dwBytesRead = 0;
wchar_t ReadBuffer[BUFFERSIZE] = {0};
OVERLAPPED ol = {0};
hFile = CreateFile(filename,
GENERIC_READ, // open for reading
FILE_SHARE_READ, // share for reading
NULL, // default security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // normal file
NULL); // no attr. template
if (hFile == INVALID_HANDLE_VALUE)
{
return;
}
// Read one character less than the buffer size to save room for
// the terminating NULL character.
if( ReadFileEx(hFile, ReadBuffer, BUFFERSIZE-1, &ol, FileIOCompletionRoutine) == FALSE)
{
CloseHandle(hFile);
return;
}
SleepEx(5000, TRUE);
dwBytesRead = g_BytesTransferred;
if (dwBytesRead > 0 && dwBytesRead <= BUFFERSIZE-1)
{
ReadBuffer[dwBytesRead]=L'\0'; // NULL character
}
else if (dwBytesRead == 0)
{
}
else
{
}
CloseHandle(hFile);
}