Win32 API 读取文件

昨天又用Win32来读取文件的时候,又出现了字符编码的问题。

用TCHAR字符来写文件呢,用系统的记事本打开是乱码。

用CHAR字字符来写呢,在读取汉字的时候后面有一串乱码,

用CHAR[]数组读取就没有后面多出来的空格或是乱码的情况,

用New CHAR[]就不行,我用memset()清零也没解决问题

Win32 API 读取文件

 

 图中后面是没有乱码了,但是后面多了好几个空格。有时后面是乱码。

 

真心的晕呀。

唉,闹心呀,

**********************************

今天又来研究的时候,突然想起读取数据完了要在后面加上个/0,试了下,居然没有问题了,真是醉了,

现记录下,以免以后又忘记了。

写入文件

void WriteFile(void)
{
    HANDLE hFile = ::CreateFile(L"CreateFileDemo.txt",    //创建文件的名称    
        GENERIC_WRITE | GENERIC_READ,        //读写模式
        0,                                //不共享读写
        NULL,                            //缺省安全属性
        CREATE_ALWAYS,                    //如果文件存在也创建
        FILE_ATTRIBUTE_NORMAL,            //一般的文件
        NULL);                            //没有模板

    if (hFile == INVALID_HANDLE_VALUE)
    {
        OutputDebugString(L"创建文件出错!");
    }

    //往文件中写入数据

    
    char chBuffer[] = "你是我的小苹果!abc";
    
    DWORD dwWritenSize = 0;
    BOOL bRet = ::WriteFile(hFile, chBuffer, strlen(chBuffer), &dwWritenSize, NULL);
    if (bRet)
    {
        OutputDebugString(L"WriteFile 写入文件成功.\r\n");
    }

    
    CloseHandle(hFile);
}

 

//读取文件

void ReadFileRead(void)
{
    HANDLE hFile = ::CreateFile(L"CreateFileDemo.txt",    //创建文件的名称    
        GENERIC_WRITE | GENERIC_READ,        //读写模式
        0,                                //不共享读写
        NULL,                            //缺省安全属性
        OPEN_EXISTING,                    //打开一个存在的文件,不存在函数调用失败
        FILE_ATTRIBUTE_NORMAL,            //一般的文件
        NULL);                            //没有模板

    if (hFile == INVALID_HANDLE_VALUE)
    {
        OutputDebugString(L"创建文件出错!");
    }

    
   int nFileLong =GetFileSize(hFile, NULL);//获得文件长度
    DWORD drReadSize = 0;
    char *pChar=new char[nFileLong];
   memset(pChar,0,nFileLong);
BOOL bRet = ::ReadFile(hFile, pChar, nFileLong, &drReadSize, NULL);

  //注意读取文件完了要在字符数组后面加上个0,昨天就是忘记这个了,弄了一晚上都没弄好。
  pChar[drReadSize]=0;
if (bRet) { OutputDebugString(L"ReadFile 读取文件成功\r\n"); SetDlgItem(hWnd,IDC_EDIT1,pChar); } else { //获取出错码 DWORD dwError = GetLastError(); //处理出错. TCHAR chErrorBuf[1024]; wsprintf(chErrorBuf, L"GetLastError()=%d\r\n", dwError); OutputDebugString(chErrorBuf); }
   Delete pChar; CloseHandle(hFile); }

效果图:

Win32 API 读取文件

 

 这下后面就没有空格和乱码的现象了。

唉,基础知识不牢的表现。

上一篇:delphi获取文件的创建/修改时间、按时间删除指定文件下的文件


下一篇:HBase深入----读写流程