鱼C论坛

 找回密码
 立即注册
查看: 3458|回复: 21

这段代码如何转成兼容unicode的

[复制链接]
发表于 2014-3-14 17:37:56 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 拈花小仙 于 2014-3-22 10:12 编辑

#include<windows.h>
#include<stdio.h>
int main()
{
BOOL done=TRUE;
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile("e:\\*.*", &fd);//第一个参数是路径名,可以使用通配
符,懂 DOS 的人应该知道吧!fd 存储有文件的信息
while (done)
{
printf("%s\n",fd.cFileName);
done=FindNextFile(hFind, &fd); //返回的值如果为 0 则没有文件要寻了
}
return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 17:37:57 | 显示全部楼层
  1. #include<windows.h>
  2. #include<stdio.h>
  3. #include <locale.h>

  4. int main()
  5. {
  6.         BOOL done=TRUE;
  7.         WIN32_FIND_DATA fd;

  8.         HANDLE hFind = FindFirstFile(TEXT("i:\\*.*"), &fd);
  9.         setlocale(LC_CTYPE, "chs");
  10.         while (done)
  11.         {
  12.                 wprintf(TEXT("%s\n"),fd.cFileName);
  13.                 done=FindNextFile(hFind, &fd);
  14.         }
  15.         return 0;
  16. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 18:32:46 | 显示全部楼层
HANDLE hFind = FindFirstFile(L"e:\\*.*", &fd);//第一个参数是路径名,可以使用通配
当前文件是用 . 表示
上一级目录在当前目录中可以查询到 是 ..
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 18:47:23 | 显示全部楼层
向往青莲 发表于 2014-3-14 18:32
HANDLE hFind = FindFirstFile(L"e:\\*.*", &fd);//第一个参数是路径名,可以使用通配
当前文件是用 . 表示 ...

如果这么改谁都知道呀,可是改了后,输出就成乱码了,你用VC6?VC6默认是多字节?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 18:51:29 | 显示全部楼层
拈花小仙 发表于 2014-3-14 18:47
如果这么改谁都知道呀,可是改了后,输出就成乱码了,你用VC6?VC6默认是多字节?

我不用VC6.。。我试试。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 18:55:10 | 显示全部楼层
#ifndef UNICODE
#define UNICODE
#endif
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 18:56:56 | 显示全部楼层
向往青莲 发表于 2014-3-14 18:51
我不用VC6.。。我试试。。。

HANDLE hFind = FindFirstFile(TEXT("I:\\*.*"), &fd);
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 18:57:30 | 显示全部楼层
我擦。。。。我居然取用L。。。我就说咋不对呢。。。。。
尼玛。。。。。。。SB了。。我
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 18:59:24 | 显示全部楼层
my_angel 发表于 2014-3-14 18:55
#ifndef UNICODE
#define UNICODE
#endif

直接改成兼容unicode到是可以,问题是改了后输出的是乱码,所以我想知道有没有对应的版本,怎样改成兼容unicode后,不是乱码的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 19:00:24 | 显示全部楼层
向往青莲 发表于 2014-3-14 18:57
我擦。。。。我居然取用L。。。我就说咋不对呢。。。。。
尼玛。。。。。。。SB了。。我

直接改成兼容unicode的也不报错,可是会成乱码,我想知道的是怎样兼容,并且让这代码有用。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:01:28 | 显示全部楼层
拈花小仙 发表于 2014-3-14 19:00
直接改成兼容unicode的也不报错,可是会成乱码,我想知道的是怎样兼容,并且让这代码有用。

好吧。。其实我没明白。。你想说的是啥意思?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 19:04:33 | 显示全部楼层
向往青莲 发表于 2014-3-14 19:01
好吧。。其实我没明白。。你想说的是啥意思?

我把这段代码改成兼容unicode后,可输出到屏幕上的全是乱码?你运行试下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:10:28 | 显示全部楼层
拈花小仙 发表于 2014-3-14 19:04
我把这段代码改成兼容unicode后,可输出到屏幕上的全是乱码?你运行试下

兼容unicode怎么改?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:13:26 | 显示全部楼层
  1. #include<windows.h>
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         BOOL done=TRUE;
  6.         WIN32_FIND_DATA fd = {0};
  7.         HANDLE hFind = FindFirstFile(TEXT("I:\\*.*"), &fd);//第一个参数是路径名,可以使用通配符,懂 DOS 的人应该知道吧!fd 存储有文件的信息
  8.                 while (done)
  9.                 {
  10. #ifdef UNICODE
  11.                         printf("%S\n",fd.cFileName);
  12. #else
  13.                         printf("%s\n",fd.cFileName);
  14. #endif
  15.                         done=FindNextFile(hFind, &fd); //返回的值如果为 0 则没有文件要寻了
  16.                 }
  17.                 return 0;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 19:18:02 | 显示全部楼层

还是不行,如果这么简单的话,我就不问了,改成unicode能运行的代码不难,可是改了后,结果不对了,你用我上面的代码转成多字节看下效果;在改成unicode码的,修改下代码看输出结果呀
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:20:27 | 显示全部楼层
拈花小仙 发表于 2014-3-14 19:18
还是不行,如果这么简单的话,我就不问了,改成unicode能运行的代码不难,可是改了后,结果不对了,你用我 ...

额。。。。这么蛋疼。。。。我只看见有结果。。结果正不正确就没看了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 19:22:33 | 显示全部楼层
向往青莲 发表于 2014-3-14 19:20
额。。。。这么蛋疼。。。。我只看见有结果。。结果正不正确就没看了。。。

是呀,我转了码以后发现不正确,这才来求教。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:25:32 | 显示全部楼层
拈花小仙 发表于 2014-3-14 19:04
我把这段代码改成兼容unicode后,可输出到屏幕上的全是乱码?你运行试下
  1. #define _UNICODE
  2. #define UNICODE
  3. #include <WINDOWS.H>
  4. void main()
  5. {
  6.         TCHAR str[20] = TEXT("Hello World");
  7.         MessageBox(NULL,str,NULL,MB_OK);
  8. }
复制代码
_UNICODE宏用于C运行期头文件,而UNICODE宏则用于Windows头文件。当编译源代码模块时,通常必须同时定义这两个宏。
另外要使用TCHAR,因为他会根据你的声明情况设置字符串类型ASCI还是Unicode。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-14 19:35:44 | 显示全部楼层
#define _UNICODE
#define UNICODE
#include<windows.h>
#include<tchar.h>
#include<stdio.h>

int main()
{
        BOOL done=TRUE;
        WIN32_FIND_DATA fd;
        HANDLE hFind = FindFirstFile(_T("e:\\*.*"), &fd);//第一个参数是路径名,可以使用通配符,懂 DOS 的人应该知道吧!fd 存储有文件的信息
        while (done)
        {
                _tprintf(_T("%s\n"),fd.cFileName);
                done=FindNextFile(hFind, &fd); //返回的值如果为 0 则没有文件要寻了
        }
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-14 19:42:09 | 显示全部楼层
仰望天上的光 发表于 2014-3-14 19:35
#define _UNICODE
#define UNICODE
#include

这个改成兼容unicode码后,无法输出中文的文件名。不知怎么才能输出
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-18 02:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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