使用本机Win32在“C”中读取文本文件(Unicode)

时间:2010-09-01 01:40:44

标签: c winapi readline createfile

我有一个使用CreateFile()和WriteFile()创建的面向行的文本文件(Unicode)。

使用ReadFile()将该文件作为二进制流读取非常简单,但需要进行额外的低级处理才能将其分解为行。

是否有为我这样做的Win32功能?

再次请注意,它是'C'(而不是C ++),我不想使用POSIX / ANSI C函数,例如readline()。

如果上述问题的答案是否定的,那么使用原生Win32 C函数完成读取面向行的文本文件的“最短代码”是什么?例如使用ReadFile(),StrChr()等

感谢。

2 个答案:

答案 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);
}