关于遍历一个文件夹下文件,得到文件名的程序,为何得到的文件名不正确?

linuxyf 2008-03-05 10:11:50
我的测试程序如下:

#include "stdafx.h"
#include <windows.h>
#include <shlwapi.h>
#include <stdio.h>

int main( void )
{
WIN32_FIND_DATAW fdw;
HANDLE handle;
HANDLE hStdout;
DWORD ret;
wchar_t filePath[ 256 ];

hStdout = GetStdHandle( STD_OUTPUT_HANDLE );

handle = FindFirstFileW( L"D:\\enc1\\word\\*", &fdw );
if ( handle != INVALID_HANDLE_VALUE )
{
do
{
swprintf( filePath, L"[%s]\n", fdw.cFileName );
WriteConsoleW( hStdout, filePath, wcslen( filePath ), &ret, NULL );
}
while ( FindNextFileW( handle, &fdw ) );
FindClose( handle );
}
return 0;
}

机子的操作系统是中文的,但安装了多国语言包。这个文件夹下有一些韩文命名的文件名,这些文件名取得后是乱码,如何能正确地得到这些文件名??不管是哪国语言命名的文件名???请高人指点,不胜感激。
...全文
224 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hityct1 2008-03-07
  • 打赏
  • 举报
回复
mark
梧桐168 2008-03-05
  • 打赏
  • 举报
回复
输出文本之前调用
梧桐168 2008-03-05
  • 打赏
  • 举报
回复
试试这个:
setlocale(LC_ALL, "");//show Chinese character
晨星 2008-03-05
  • 打赏
  • 举报
回复
有时控制台显示乱码不代表内存中是错误的。
试着用那个字符串作为文件名来打来文件,如果文件找不到,那说明连内存中的编码都是错的。
Supper_Jerry 2008-03-05
  • 打赏
  • 举报
回复
看看得到的乱码内存中的数据,是不是就是韩文的ascii码。
Supper_Jerry 2008-03-05
  • 打赏
  • 举报
回复
在do里面加上一句if(*FindFileData.cFileName == '.') continue;
wind556 2008-03-05
  • 打赏
  • 举报
回复
编译器 使用支持多国语言的编译器应该可以
xstong1982 2008-03-05
  • 打赏
  • 举报
回复
可能是swprintf( filePath, L"[%s]\n", fdw.cFileName );这句话的问题
试试用MultiByteToWideChar函数
  • 打赏
  • 举报
回复
好像你得现设置控制台的语言,才能正确显示韩文的名字。
cad_vc 2008-03-05
  • 打赏
  • 举报
回复
既然是用unicode处理的,内存中看到的是乱码,可能实际是正确的,你可以试试读出的这些文件。
iFree 2008-03-05
  • 打赏
  • 举报
回复
控制台不能正常输出unicode编码的字符啊
  • 打赏
  • 举报
回复
这样应该能正确现实韩文,但中文就不能保证了

#include <windows.h>
#include <shlwapi.h>
#include <stdio.h>

int main( void )
{
WIN32_FIND_DATAW fdw;
HANDLE handle;
HANDLE hStdout;
DWORD ret;
wchar_t filePath[ 256 ];

hStdout = GetStdHandle( STD_OUTPUT_HANDLE );

handle = FindFirstFileW( L"D:\\enc1\\word\\*", &fdw );
setlocale(LC_ALL,"kor");
if ( handle != INVALID_HANDLE_VALUE )
{
do
{
printf("[%S]",fdw.cFileName);
}
while ( FindNextFileW( handle, &fdw ) );
FindClose( handle );
}
return 0;
}
linuxyf 2008-03-05
  • 打赏
  • 举报
回复
swprintf( filePath, L"[%s]\n", fdw.cFileName );

我监视fdw.cFileName中就是乱码

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧