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 写入文件成功.\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 读取文件的更多相关文章
- HTML5 file api读取文件的MD5码工具
1.工具的用途:用HTML5 file api读取文件的MD5码.MD5码在文件的唯一性识别上有很重要的应用,业内常用MD5进行文件识别.文件秒传.文件安全性检查等: 2.适用性:IE.Chrome皆 ...
- Java8 新API读取文件内容
import java.io.IOException;import java.nio.charset.Charset;import java.nio.file.Files;import java.ni ...
- HTML5的File API读取文件信息
html结构: <div id="fileImage"></div> <input type="file" value=" ...
- File API 读取文件小结
简单地说,File API只规定怎样从硬盘上提取文件,然后交给在网页中运行的JavaScript代码. 与以往文件上传不一样,File API不是为了向服务器提交文件设计的. 关于File API不能 ...
- 使用Win32 API 查找文件
头文件:#include <windows.h> //FindFirstFile() 获得指定目录的第一个文件 HANDLE FindFirstFile( LPCTSTR lpFileNa ...
- WIN32 API 获取文件版本信息
CString strVersion; CString strPath(_T("xxxxxxxx.exe")); // 读文件信息 DWORD dwVerHnd = 0; DWOR ...
- 使用FileSystem自带的api读取hdfs中的文件
博客搬家自https://my.oschina.net/itsyizu/blog/ 1. 创建hadoop MapReduce项目 输入项目名称 创建好的项目初始化状态如下 编写java类 impor ...
- 使用 JavaScript File API 实现文件上传
概述 以往对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情.虽然伴随着 Web 2.0 应用技术的不断发展,JavaScript 正在扮演越来越重要的角色,但是出于安全性的考虑,JavaScr ...
- 调用Web API将文件上传到服务器的方法(.Net Core)
最近遇到一个将Excel通过Web API存到服务器的问题,其中涉及到Excel的读取.调用API.Web API怎么进行接收. 一. Excel的读取.调用API Excel读取以及调用API的代 ...
- File API 读取上传的文件
1, 在html 文档中,<input type="file"> 我们可以选择文件进行上传,但这时只能上传一个文件.如果加上multiple 属性,可以上传多个文件,上 ...
随机推荐
- WPF/C#:如何实现拖拉元素
前言 在Canvas中放置了一些元素,需要能够拖拉这些元素,在WPF Samples中的DragDropObjects项目中告诉了我们如何实现这种效果. 效果如下所示: 拖拉过程中的效果如下所示: 具 ...
- throws和try catch的区别
1.throws是表明方法抛出异常,需要调用者来处理,如果不想处理就一直向外抛,最后会有jvm来处理: 2.try catch 是自己来捕获别人抛出的异常,然后在catch里面去处理: 一般情况下,第 ...
- (Java)常用类库
Spring 常用工具类 Spring作为常用的开发框架,在Spring框架应用中,排在ApacheCommon.Guava.Huool等通用库后,第二优先级可以考虑使用Spring-core-xxx ...
- 网络化的控制系统简介(NCS)
作为一个搞物联网应用的,最近才接触到NCS这个概念.有点东西,赶紧记录一下. NCS由通过网络连通的控制环路组成,控制信号和反馈信号会在控制器和本地系统间交换.典型的方块图如下: 其中,本地(Plan ...
- MySQL执行过程及执行顺序
一.MySQL执行过程 简单概括: 1.我们在客户端发起一个SQL的查询: 2.连接器判断用户登录以及用户权限: 3.缓存命中,走缓存,直接返回查询结果: 3.缓存没命中,到达分析器,对SQL语句进行 ...
- Java核心基础之数据类型
Java内置数据类型 计算机基础知识 bit 位 ,即0或者1, 0101010110 byte字节,8位作为⼀个字节,字节是处理数据的基本单位 1 byte = 8bits 1KB = 1024 b ...
- win10彻底关闭windows defender,解决无故占用大量CPU问题
win10彻底关闭defender的方法 首先右键开始菜单按钮,点击"运行",输入"gpedit.msc",打开"本地组策略编辑器". 依次 ...
- webgl未使用独立显卡报告2
楔子 在上一篇文章 <# [https://juejin.cn/post/7074771064286347301] webgl未使用独立显卡报告> 发表后,有读者在公众号给我发了一段评论, ...
- 在Visual Studio Code中,鼠标双击PHP变量的时候,如何选择包括$在内的整个变量名
依次点击:文件->首选项->设置 并在"editor.wordSeparators"设置中为您的语言指定删除"$"符号:
- 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 ...