VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 476|回复: 12

关于windows编程课程ReadFile的小问题

[复制链接]
01_avatar_middle
最佳答案
0 
在线会员 发表于 2020-11-29 01:27:36 | 显示全部楼层 |阅读模式
想问一下是不是字符编码的问题所以读入的是乱码?有点懵逼
QQ截图20201129012546.png




上一篇:fileDlg.m_ofn.lpstrInitialDir的使用
下一篇:MIDL属性页怎么打开?(vs2019)
08_avatar_middle
最佳答案
9 
在线会员 发表于 2020-11-29 18:00:58 | 显示全部楼层
  1. TCHAR a[100] = L"一二三四五六七八九十十一十二十三十四十五十六十七十八十九二十二一二二二三二四二五二六二七二八二九";
  2.         DWORD dwRealWrite = 0;
  3.         bool Bwrite = WriteFile(hFile, a, sizeof(TCHAR) * 100, &dwRealWrite, NULL);
复制代码


全部写TCHAR啊
关于windows编程课程ReadFile的小问题

还有 _swprintf 这个函数,。在VS2019里面不让使用强制让使用 swprintf_s!!!
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C4996        '_swprintf': This function or variable may be unsafe. Consider using swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.        Project1        D:\soucefile\C++\Project1\源.cpp        31       
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-11-29 17:26:38 | 显示全部楼层
Acz 发表于 2020-11-29 17:17
还好字数不用太多 不然我都要写小作文了

代码贴不出来  
问题就是    窄字节 转宽字节的问题
11.jpg

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
08_avatar_small SummerGull + 2 + 2 赞一个!

查看全部评分

19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-11-29 02:05:32 | 显示全部楼层
_stprintf(...);你传的是TCHAR值 没记错应该是%hs
01_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-11-29 15:51:53 | 显示全部楼层
236a 发表于 2020-11-29 02:05
_stprintf(...);你传的是TCHAR值 没记错应该是%hs

改了 还是不对。。
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-11-29 16:06:04 | 显示全部楼层
Acz 发表于 2020-11-29 15:51
改了 还是不对。。

那把你代码贴出来  把你捣鼓一下
01_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-11-29 16:18:55 | 显示全部楼层
236a 发表于 2020-11-29 16:06
那把你代码贴出来  把你捣鼓一下

我用的vs2015 还要打中文字
#include<Windows.h>
#include<tchar.h>
#include<ImageHlp.h>
#pragma comment(lib,"ImageHlp.lib")
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdShow) {
        HANDLE hFile = CreateFile(_T("F:\\windows编程练习.txt"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile == INVALID_HANDLE_VALUE)
                MessageBox(NULL, _T("文件打开失败"), _T("Tips"), MB_OK | MB_ICONEXCLAMATION);
        else
        {
                MessageBox(NULL, _T("文件打开成功"), _T("Tips"), MB_OK | MB_ICONWARNING);
                char a[100] = "一二三四五六七八九十十一十二十三十四十五十六十七十八十九二十二一二二二三二四二五二六二七二八二九";
                DWORD dwRealWrite = 0;
                bool Bwrite = WriteFile(hFile, a, sizeof(char) * 100, &dwRealWrite, NULL);
                if (Bwrite) {
                        MessageBox(NULL, _T("文件写入成功"), _T("Tips"), MB_OK);
                }
                else
                {
                        MessageBox(NULL, _T("文件写入失败"), _T("Tips"), NULL);
                        int a = GetLastError();
                }
                //以下为读取
                CloseHandle(hFile);
                hFile = CreateFile(_T("F:\\windows编程练习.txt"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
                TCHAR b[100] = { 0 };
                DWORD dwRealRead = 0;
                bool bRead = ReadFile(hFile, b, sizeof(b), &dwRealRead, NULL);
                if (bRead) {
                        TCHAR RealFile[120] = { 0 };
                        _stprintf(RealFile, _T("该文件内容是%hs"), b);
                        MessageBox(NULL, RealFile, _T("Tips"), NULL);

                }
                CloseHandle(hFile);
        }
        return 0;
}
//用的VS2015  防灌水
08_avatar_middle
最佳答案
9 
在线会员 发表于 2020-11-29 16:50:23 | 显示全部楼层
Acz 发表于 2020-11-29 16:18
我用的vs2015 还要打中文字
#include
#include

我就是贴代码不注意。没有中文字。直接灌水处理了。学到了。
01_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-11-29 17:17:34 | 显示全部楼层
SummerGull 发表于 2020-11-29 16:50
我就是贴代码不注意。没有中文字。直接灌水处理了。学到了。

还好字数不用太多 不然我都要写小作文了
70_avatar_middle
最佳答案
44 
在线会员 发表于 2020-11-29 17:36:39 | 显示全部楼层
上说的对,是write和read时 的宽窄字节没统一

给个建议,所有涉及字符串的 变量,参数,函数  要么都用 char 的 要么用 wchar_t的 , 最好是都用t 版本的
08_avatar_middle
最佳答案
9 
在线会员 发表于 2020-11-29 17:45:23 | 显示全部楼层
tony666 发表于 2020-11-29 17:36
上说的对,是write和read时 的宽窄字节没统一

给个建议,所有涉及字符串的 变量,参数,函数  要么都用  ...

对。我就是 统一 用t的。 避免麻烦。
01_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-11-29 18:19:43 | 显示全部楼层
236a 发表于 2020-11-29 17:26
代码贴不出来  
问题就是    窄字节 转宽字节的问题

ok 懂了谢谢
01_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-11-29 18:20:44 | 显示全部楼层

我也改TCHAR就对了 谢谢啦
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-5-11 21:18

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表