可编译为 UNICODE 和 ANSI 版本的遍历目录树程序_0.1
路径暂时是写死的
编译两个版本的程序:
g++  treeT.cpp -municode -D_UNICODE -o treeT_UNI
g++  treeT.cpp -o treeT_ASC
为了观察ANSI版在遍历文件夹如果遇到Unicode字符会发生什么情况而写来作对比的
他们都可以接收终端传送的中文字符
ANSI版:
opendir/readdir 遍历目录遇到 UNICODE字符的时候会出问题
UNICODE版:
输出到stdout的时候,值>128 的UNICODE字符丢失
改为 WriteConsoleW 函数可以解决这个问题
#include <iostream>
#include <cstdio>
#include <fcntl.h>
#include <sys/stat.h>
#include <dirent.h>
#include <tchar.h>
#include <cwchar>
#include <sys/types.h>
#include <cstring> #define NAME_MAX 1024 #ifdef _UNICODE
#define FMT_D "%ld"
#define FMT_S "%ls"
#define TXT_FILE "TREE_UTF.txt"
#else
#define FMT_D "%d"
#define FMT_S "%s"
#define TXT_FILE "TREE_ASC.txt"
#endif void func(TCHAR path[]); static FILE * fp = _tfopen( _TEXT( TXT_FILE ), _TEXT("wb")); int _tmain(int argc, TCHAR *argv[] )
{
TCHAR pth[] = _TEXT("D:\\Extra");
func(pth);
fclose(fp);
return ;
} void func(TCHAR path[])
{
_TDIR * a = _topendir(path);
_tdirent * dp;
_TDIR * aa;
struct _stat stbuf; TCHAR fullpath[NAME_MAX] = _TEXT(""); while (dp = _treaddir(a))
{
if (
_tcscmp(dp->d_name, _TEXT(".")) ==
|| _tcscmp(dp->d_name, _TEXT("..")) ==
)
{
continue;
} _stprintf(fullpath, _TEXT(FMT_S "\\" FMT_S), path, dp->d_name);
_tstat(fullpath, &stbuf); if ( (stbuf.st_mode & S_IFMT) == S_IFDIR )
{
func( fullpath );
}
else
{
//output file list
_ftprintf(fp, _TEXT( FMT_D "\t" FMT_S "\r\n"), stbuf.st_mtime, fullpath );
_ftprintf(stdout, _TEXT( FMT_D "\t" FMT_S "\r\n"), stbuf.st_mtime, fullpath );
} }
_tclosedir(a);
}
可编译为 UNICODE 和 ANSI 版本的遍历目录树程序_0.1的更多相关文章
- 遍历目录树 - Unicode 模式
		
=info 遍历目录树 支持 Unicode Code by 523066680@163.com 2017-03 V0.5 使用Win32API判断目录硬链接 ...
 - 有关UNICODE、ANSI字符集和相关字符串操作
		
Q UNICODE字符串如何显示 A 如果程序定义了_UNICODE宏直接用 WCHAR *str=L"unicodestring"; TextOut(0,0,str); 否则就需 ...
 - UNICODE与ANSI的区别
		
什么是ANSI,什么又是UNICODE呢?其实这是两种不同的编码方式标准,ANSI中的字符采用8bit,而UNICODE中的字符采用16bit.(对于字符来说ANSI以单字节存放英文字符,以双字节存放 ...
 - Unicode 和 ANSI
		
Project Properties -> General-> Character set,里面显示了是不是unicode. Unicode处理String的方式不一样,一定要注意!! ...
 - [转]unicode,ansi,utf-8,unicode big endian的故事
		
unicode,ansi,utf-8,unicode big endian的故事很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的 ...
 - UNICODE和ANSI字符串的转换(解释了MultiByteToWideChar,WideCharToMultiByte,GetTextCharsetInfo,GetTextCharset,IsDBCSLeadByte,IsDBCSLeadByteEx,IsTextUnicode一共7个函数)
		
继上集故事<多字符集(ANSI)和UNICODE及字符串处理方式准则 >,我们现在有一些特殊需求: 有时候我们的字符串是多字符型,我们却需要使用宽字符型:有的时候却恰恰相反. Window ...
 - 字符编码(续)---Unicode与ANSI字符串转换以及分辨字符编码形式
		
Unicode与ANSI字符串转换 我们使用windows函数MultiByteToWideChar将多字节字符串转换为宽字符字符串,如下: int MultiByteToWideChar( UINT ...
 - cmake编译opencv时指定cuda版本
		
之前有网友提问说,基于cmake编译时如果切换cuda版本,比如我同时装了cuda8和cuda9,opencv总是找到cuda9,我想用cuda8怎么办?实际上,手头上要配置的工程是基于opencv3 ...
 - Creating Dialogbased Windows Application (4) / 创建基于对话框的Windows应用程序(四)Edit Control、Combo Box的应用、Unicode转ANSI、Open File Dialog、文件读取、可变参数、文本框自动滚动 / VC++, Windows
		
创建基于对话框的Windows应用程序(四)—— Edit Control.Combo Box的应用.Unicode转ANSI.Open File Dialog.文件读取.可变参数.自动滚动 之前的介 ...
 
随机推荐
- Hadoop - Mac OSX下配置和启动hadoop以及常见错误解决
			
0. 安装JDK 参考网上教程在OSX下安装jdk 1. 下载及安装hadoop a) 下载地址: http://hadoop.apache.org b) 配置ssh环境 在terminal里面输入: ...
 - 有时候为了方便sql语句的对比和查询,我们可以使用declare来定义变量 上下篇的问题
			
--定义一些参数 declare @nodeId int,@ekid int ,@ecid int,@eid int,@pid int --列表 SELECT * FROM ( SELECT *,RO ...
 - [转]Sublime Text3注册码(可用)
			
补充:2016.05 最近经过测试,3个注册码在新版3103的sublime上已经不可用了. 现补充两枚新版的license key: —– BEGIN LICENSE —– Michael Barn ...
 - python在windows平台的pip安装package时的编译问题
			
在安装pcapy时,出现以下错误: building 'pcapy' extension error: Microsoft Visual C++ 9.0 is required (Unable to ...
 - Java历史版本下载
			
下载个以前版本的Java工具不容易.Java SE 6 版本拿去: http://www.oracle.com/technetwork/java/javasebusiness/downloads/ja ...
 - 防抖(Debounce)与节流( throttle)区别
			
http://www.cnblogs.com/ShadowLoki/p/3712048.html http://blog.csdn.net/tina_ttl/article/details/51830 ...
 - ArcGIS Geodatabase版本控制机制的学习总结
			
本文是最近内部的一个学习的自我整理,只有关键信息,如果需要详细了解,请参阅ArcGIS帮助文档: http://resources.arcgis.com/zh-cn/help/main/10.1/in ...
 - jQuery插件实现图片展开效果,jquery.gallery。仿腾讯QQ空间说说图片展示效果。
			
公司的项目http://www.umfun.com/,有个说说的页面(和腾讯QQ空间说说一样),里面有个发表图片功能,上传完图片,需要点击展开的效果. 当时手里面事情比较多(公司就我一个前端),忙不过 ...
 - CodeWarrior环境下中断使用
			
对于飞思卡尔CodeWarrior的中断使用,一般有3种方法: 1.把#pragma TRAP_PROC放在中断程序前面,并把中断向量表放到*.prm. 例如: #pragma TRAP_PROC v ...
 - Spark源码系列(九)Spark SQL初体验之解析过程详解
			
好久没更新博客了,之前学了一些R语言和机器学习的内容,做了一些笔记,之后也会放到博客上面来给大家共享.一个月前就打算更新Spark Sql的内容了,因为一些别的事情耽误了,今天就简单写点,Spark1 ...