【问题标题】:Handle the content of a txt file using windows API使用 windows API 处理 txt 文件的内容
【发布时间】:2012-07-03 14:56:28
【问题描述】:

我使用如下代码片段来获取文本文件的内容。然而,最后的缓冲区buff 在一个地方只有数字 8,没有别的。正在打开的文件的唯一内容是“项目”一词。我如何处理(即打印)我应该收到的内容或结果?以下代码有什么问题:

        TCHAR buff[20];
        DWORD dwNumRead;
        CString finalPath = path + L"\\" + fileName.c_str();
        HANDLE hfile=CreateFile(finalPath ,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

        if(ReadFile(hfile,buff,20,&dwNumRead,NULL))
        {
            CString temp;
            temp.Format(L"%s",&buff[0]);
            ATLTRACE(L"Success %s", temp);
        }
        CloseHandle(hfile);

【问题讨论】:

  • 您是使用 Unicode 还是多字节字符集进行编译?如果您使用L"%s" 编译多字节和格式,那么第一个字符将有一个尾随0,这将被视为多字节字符中的终止空值。

标签: c++ windows file buffer readfile


【解决方案1】:

问题在于您试图打印由宽字符和 %s 宏组成的 MFC CString。您需要 %S 宏来打印宽字符。

这行得通:

    char buff[20] = "";
    DWORD dwNumRead;
    CString finalPath = path + L"\\" + fileName.c_str();;
    HANDLE hfile=CreateFile(finalPath ,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

    if(ReadFile(hfile,buff,20,&dwNumRead,NULL))
    {
        CString temp = buff;
        ATLTRACE("Success %S", temp);
    }
    CloseHandle(hfile);

否则,请使用以下额外的 C++ defs 以 unicode 编译您的程序。 UNICODE,_UNICODE

【讨论】:

  • 好的,它确实如此。问题出在第一行,即它不能由 TCHAR[] 工作,尽管通常建议采用这种方式。
  • TCHAR 也可以。你必须用 UNICODE 宏编译你的程序
猜你喜欢
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
相关资源
最近更新 更多