昨天又用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 写入文件成功.\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+1];//要多加一个,后面删除指针才不会报异常
   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 读取文件的更多相关文章

  1. HTML5 file api读取文件的MD5码工具

    1.工具的用途:用HTML5 file api读取文件的MD5码.MD5码在文件的唯一性识别上有很重要的应用,业内常用MD5进行文件识别.文件秒传.文件安全性检查等: 2.适用性:IE.Chrome皆 ...

  2. Java8 新API读取文件内容

    import java.io.IOException;import java.nio.charset.Charset;import java.nio.file.Files;import java.ni ...

  3. HTML5的File API读取文件信息

    html结构: <div id="fileImage"></div> <input type="file" value=" ...

  4. File API 读取文件小结

    简单地说,File API只规定怎样从硬盘上提取文件,然后交给在网页中运行的JavaScript代码. 与以往文件上传不一样,File API不是为了向服务器提交文件设计的. 关于File API不能 ...

  5. 使用Win32 API 查找文件

    头文件:#include <windows.h> //FindFirstFile() 获得指定目录的第一个文件 HANDLE FindFirstFile( LPCTSTR lpFileNa ...

  6. WIN32 API 获取文件版本信息

    CString strVersion; CString strPath(_T("xxxxxxxx.exe")); // 读文件信息 DWORD dwVerHnd = 0; DWOR ...

  7. 使用FileSystem自带的api读取hdfs中的文件

    博客搬家自https://my.oschina.net/itsyizu/blog/ 1. 创建hadoop MapReduce项目 输入项目名称 创建好的项目初始化状态如下 编写java类 impor ...

  8. 使用 JavaScript File API 实现文件上传

    概述 以往对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情.虽然伴随着 Web 2.0 应用技术的不断发展,JavaScript 正在扮演越来越重要的角色,但是出于安全性的考虑,JavaScr ...

  9. 调用Web API将文件上传到服务器的方法(.Net Core)

    最近遇到一个将Excel通过Web API存到服务器的问题,其中涉及到Excel的读取.调用API.Web  API怎么进行接收. 一. Excel的读取.调用API Excel读取以及调用API的代 ...

  10. File API 读取上传的文件

    1, 在html 文档中,<input type="file"> 我们可以选择文件进行上传,但这时只能上传一个文件.如果加上multiple 属性,可以上传多个文件,上 ...

随机推荐

  1. 图最短路径之Floyd

    Floyd Warshall Algorithm 算法参考地址:Floyd Warshall Algorithm | DP-16 - GeeksforGeeks 算法的简介 Floyd 用于求解所有对 ...

  2. 高通Android UEFI中的LCD分析(2):关键的函数

    # 高通Android UEFI中的LCD分析(2):关键的函数 背景 在启动流程分析中,看到了几个经常出现的函数,这里实际分析一下有关的实现.以搞清楚高通做了什么,以及我们能做什么. 重要函数 MD ...

  3. 3562-Qt工程编译说明、GPU核心使用说明

  4. 单qubit量子门

    量子编程的基本单元就是量子门.量子编程有点像传统的电路设计,一个量子程序可以被写成量子门序列. 图中有一些符合,比如H门.X门.Z门.测量等,我们都会接触到. 传统计算机程序的输入和输出可以不一样,但 ...

  5. vulhub - INFOSEC PREP: OSCP

    vulhub - INFOSEC PREP: OSCP 信息收集 nmap 192.168.157.0/24 nmap -sT --min-rate 10000 -p- 192.168.157.162 ...

  6. 1.Javascript 快速入门(主要)

    运算 &&运算是与运算,只有所有都为true,&&运算结果才是true: true && true; // 这个&&语句计算结果为tru ...

  7. 在Visual Studio Code中,鼠标双击PHP变量的时候,如何选择包括$在内的整个变量名

    依次点击:文件->首选项->设置 并在"editor.wordSeparators"设置中为您的语言指定删除"$"符号:

  8. 入门深度学习和TensorFlow

    入门深度学习和TensorFlow时,首先要确保掌握必要的先导知识,然后逐步通过理论和实践相结合的方式深入学习.以下是一个具体的引导例子以及后续的学习计划. 入门深度学习和TensorFlow 1. ...

  9. PixiJS源码分析系列:第三章 使用 canvas 作为渲染器

    使用 canvasRenderer 渲染 上一章分析了一下 Sprite 在默认 webgl 渲染器上的渲染,这章让我们把目光聚集到 canvasRenderer 上 使用 canvas 渲染器渲染图 ...

  10. emojiCTF2024

    emojiCTF2024 WEB http 题目:​​ 思路: 修改 UA 头为 EMOJI_CTF_User_Agent_v1.0:User-Agent: EMOJI_CTF_User_Agent_ ...