VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 107|回复: 4

遍历出的文件名为什么不能输出

[复制链接]
13_avatar_middle
最佳答案
0 
在线会员 发表于 2020-2-25 18:09:30 | 显示全部楼层 |阅读模式
本帖最后由 14106428@qq.com 于 2020-2-25 19:18 编辑

#include <windows.h>
#include <tchar.h>
#include <iostream>
using namespace std;

int main()
{
        TCHAR path[] = L"F:\\C++\\C++ 零基础入门到完全独立开发1 基础篇\\*";
        TCHAR name[50];
        WIN32_FIND_DATAW findFiles;
        HANDLE hFind= FindFirstFile(path,&findFiles);
        if (hFind != INVALID_HANDLE_VALUE) {
                while (FindNextFile(hFind,&findFiles)) {
                        if (_tcscmp(findFiles.cFileName, L".") == 0 || _tcscmp(findFiles.cFileName, L"..") == 0) { continue; }
                        cout << findFiles.cFileName << endl;
                }
        }
        FindClose(hFind);
        system("pause");
        return 0;
}

为什么输出的结果不是我想要的文件名
微信图片_20200225180820.png




上一篇:求教两道C++题,谢谢!
下一篇:VC++基础班P25查找定义
13_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-2-25 18:20:15 | 显示全部楼层
#include <windows.h>
#include <tchar.h>
#include <iostream>
using namespace std;

int main()
{
        std::wcout.imbue(std::locale("chs"));//缺少这一句wcout无法输出中文
        TCHAR path[] = L"F:\\C++\\C++ 零基础入门到完全独立开发1 基础篇\\*";
        TCHAR name[50];
        WIN32_FIND_DATAW findFiles;
        HANDLE hFind= FindFirstFile(path,&findFiles);
        if (hFind != INVALID_HANDLE_VALUE) {
                while (FindNextFile(hFind,&findFiles)) {
                        if (_tcscmp(findFiles.cFileName, L".") == 0 || _tcscmp(findFiles.cFileName, L"..") == 0) { continue; }
                        wcout << findFiles.cFileName << endl;//使用wcout输出中文
                }
        }
        FindClose(hFind);
        system("pause");
        return 0;
}
找到了一种解决方案,就是使用wcout输出,并加了一句话std::wcout.imbue(std::locale("chs"));
虽然问题解决了,但是还是不明白,为什么要用wcou输出,还需要再加一句话.有没有其他解决方案.
使用MessageBox()输出的时候就没有这种问题
77_avatar_middle
最佳答案
24 
online_vip 发表于 2020-2-25 18:42:48 | 显示全部楼层
14106428@qq.com 发表于 2020-2-25 18:20
#include
#include
#include

因为这块是根据你当前的工程编码来说的,如果当前工程是Unicode宽字节的话,那么 TCHAR 就是 wchar_t,所以你用 cout 去输出的话肯定不行,就得换成 wcout 了

可以自己定义一个宏:

#ifdef UNICODE
#define tout wcout
#else
#define tout cout
#endif

之后直接使用这个 tout 就可以了
13_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-2-25 19:13:20 | 显示全部楼层
本帖最后由 14106428@qq.com 于 2020-2-25 19:14 编辑
Health 发表于 2020-2-25 18:42
因为这块是根据你当前的工程编码来说的,如果当前工程是Unicode宽字节的话,那么 TCHAR 就是 wchar_t,所 ...


感谢您的回复,您的回复对我很有帮助.经过您的提示,我又找到两种可以正常输出的方法.(wprintf和WriteConsoleW)
80_avatar_middle
最佳答案
0 
在线会员 发表于 2020-3-10 12:52:15 | 显示全部楼层
这输出的应该是指针吧,而且是同一个指针。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

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

关闭

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

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

GMT+8, 2020-4-9 20:48

Powered by CcTry.CoM

© 2009-2020 cctry.com

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