zoukankan      html  css  js  c++  java
  • 可编译为 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 函数可以解决这个问题

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <fcntl.h>
     4 #include <sys/stat.h>
     5 #include <dirent.h>
     6 #include <tchar.h>
     7 #include <cwchar>
     8 #include <sys/types.h>
     9 #include <cstring>
    10 
    11 #define NAME_MAX 1024
    12 
    13 #ifdef _UNICODE
    14     #define FMT_D "%ld"
    15     #define FMT_S "%ls"
    16     #define TXT_FILE "TREE_UTF.txt"
    17 #else
    18     #define FMT_D "%d"
    19     #define FMT_S "%s"
    20     #define TXT_FILE "TREE_ASC.txt"
    21 #endif
    22 
    23 void func(TCHAR path[]);
    24 
    25 static FILE * fp = _tfopen( _TEXT( TXT_FILE ), _TEXT("wb"));
    26 
    27 int _tmain(int argc, TCHAR *argv[] )
    28 {
    29     TCHAR pth[] = _TEXT("D:\Extra");
    30     func(pth);
    31     fclose(fp);
    32     return 0;
    33 }
    34 
    35 void func(TCHAR path[])
    36 {
    37     _TDIR * a = _topendir(path);
    38     _tdirent * dp;
    39     _TDIR * aa;
    40     struct _stat stbuf;
    41 
    42     TCHAR fullpath[NAME_MAX] = _TEXT("");
    43 
    44     while (dp = _treaddir(a))
    45     {
    46         if (
    47                _tcscmp(dp->d_name, _TEXT(".")) == 0
    48             || _tcscmp(dp->d_name, _TEXT("..")) == 0  
    49         )
    50         {
    51             continue;
    52         }
    53 
    54         _stprintf(fullpath, _TEXT(FMT_S "\" FMT_S), path, dp->d_name);
    55         _tstat(fullpath, &stbuf);
    56 
    57         if ( (stbuf.st_mode & S_IFMT) == S_IFDIR )
    58         {
    59             func( fullpath );
    60         }
    61         else
    62         {
    63             //output file list
    64             _ftprintf(fp, _TEXT( FMT_D "	" FMT_S "
    "),  stbuf.st_mtime, fullpath );
    65             _ftprintf(stdout, _TEXT( FMT_D "	" FMT_S "
    "),  stbuf.st_mtime, fullpath );
    66         }
    67 
    68     }
    69     _tclosedir(a);
    70 }
    71 
    72 
  • 相关阅读:
    js遍历table,gridview
    JavaScript和Webservice实现联动
    DataTable应用
    POJ1039+几何+直线于线段相交
    POJ2398+几何+排序
    HDU4506+快速求幂
    HDU4536+DFS
    POJ3304+几何
    POJ3555+几何+半平面交
    HDU4544+优先队列
  • 原文地址:https://www.cnblogs.com/paktc/p/4989768.html
Copyright © 2011-2022 走看看