昨天又用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. WPF/C#:如何实现拖拉元素

    前言 在Canvas中放置了一些元素,需要能够拖拉这些元素,在WPF Samples中的DragDropObjects项目中告诉了我们如何实现这种效果. 效果如下所示: 拖拉过程中的效果如下所示: 具 ...

  2. throws和try catch的区别

    1.throws是表明方法抛出异常,需要调用者来处理,如果不想处理就一直向外抛,最后会有jvm来处理: 2.try catch 是自己来捕获别人抛出的异常,然后在catch里面去处理: 一般情况下,第 ...

  3. (Java)常用类库

    Spring 常用工具类 Spring作为常用的开发框架,在Spring框架应用中,排在ApacheCommon.Guava.Huool等通用库后,第二优先级可以考虑使用Spring-core-xxx ...

  4. 网络化的控制系统简介(NCS)

    作为一个搞物联网应用的,最近才接触到NCS这个概念.有点东西,赶紧记录一下. NCS由通过网络连通的控制环路组成,控制信号和反馈信号会在控制器和本地系统间交换.典型的方块图如下: 其中,本地(Plan ...

  5. MySQL执行过程及执行顺序

    一.MySQL执行过程 简单概括: 1.我们在客户端发起一个SQL的查询: 2.连接器判断用户登录以及用户权限: 3.缓存命中,走缓存,直接返回查询结果: 3.缓存没命中,到达分析器,对SQL语句进行 ...

  6. Java核心基础之数据类型

    Java内置数据类型 计算机基础知识 bit 位 ,即0或者1, 0101010110 byte字节,8位作为⼀个字节,字节是处理数据的基本单位 1 byte = 8bits 1KB = 1024 b ...

  7. win10彻底关闭windows defender,解决无故占用大量CPU问题

    win10彻底关闭defender的方法 首先右键开始菜单按钮,点击"运行",输入"gpedit.msc",打开"本地组策略编辑器". 依次 ...

  8. webgl未使用独立显卡报告2

    楔子 在上一篇文章 <# [https://juejin.cn/post/7074771064286347301] webgl未使用独立显卡报告> 发表后,有读者在公众号给我发了一段评论, ...

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

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

  10. Error: Dynamic require of "path" is not supported

    failed to load config from D:\BaiduSyncdisk\vue3\sys-manager\vite.config.jserror when starting dev s ...