zoukankan      html  css  js  c++  java
  • Win32 API 读取文件

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

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

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

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

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

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

    真心的晕呀。

    唉,闹心呀,

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

    今天又来研究的时候,突然想起读取数据完了要在后面加上个/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 写入文件成功.
    ");
        }
    
        
        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+1];//要多加一个,后面删除指针才不会报异常
       memset(pChar,0,nFileLong);
    BOOL bRet = ::ReadFile(hFile, pChar, nFileLong, &drReadSize, NULL);

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

    效果图:

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

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

    签名:GreenLeaf1976
  • 相关阅读:
    Spring Boot入门篇(基于Spring Boot 2.0系列)
    webpack性能优化配置
    Vuex的通俗详解
    Vuefilter() 过滤器
    transition页面加载触发问题解决方案
    VUE render VS template
    provide & inject 跨组件传值
    Vue 组件通讯(组件传值)
    js封装 DOM获取
    GIT SVN 版本管理 git + gitHub
  • 原文地址:https://www.cnblogs.com/greenleaf1976/p/14975112.html
Copyright © 2011-2022 走看看