青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 319, comments - 22, trackbacks - 0, articles - 11
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

找不到 dirent.h 文件

Posted on 2012-04-28 06:42 RTY 閱讀(9719) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++Windows
轉(zhuǎn)載:http://www.cnblogs.com/fzzl/archive/2009/07/14/1522913.html

【轉(zhuǎn)】vs2005下的dirent.h  該方法同樣適用于VS2008 及VS2010

http://www.analogcn.com/Article/wz3/200802/20080202211037.html

 

dirent.h是gcc下的一個(gè)頭文件,而在VS2005中是沒(méi)有的。這個(gè)文件中封裝了幾個(gè)對(duì)目錄進(jìn)行操作函數(shù):

static DIR *opendir (const char *dirname);
static struct dirent *readdir (DIR *dirp);
static int closedir (DIR *dirp);

 對(duì)于在linux->windows之間進(jìn)行程序移植來(lái)講常常會(huì)造成一些困擾,在網(wǎng)上仔細(xì)搜了一下,發(fā)現(xiàn)原來(lái)已經(jīng)有位好同志寫了相應(yīng)的移植代碼,如下所示:


typedef struct dirent {
  /* name of current directory entry (a multi-byte character string) */
  char d_name[MAX_PATH + 1];

  /* file attributes */
  WIN32_FIND_DATA data;
} dirent;


typedef struct DIR {
  /* current directory entry */
  dirent current;

  /* is there an un-processed entry in current? */
  int cached;

  /* file search handle */
  HANDLE search_handle;

  /* search pattern (3 = zero terminator + pattern "\\*") */
  TCHAR patt[MAX_PATH + 3];
} DIR;


static DIR *opendir (const char *dirname);
static struct dirent *readdir (DIR *dirp);
static int closedir (DIR *dirp);


/* use the new safe string functions introduced in Visual Studio 2005 */
#if defined(_MSC_VER) && _MSC_VER >= 1400
# define STRNCPY(dest,src,size) strncpy_s((dest),(size),(src),_TRUNCATE)
#else
# define STRNCPY(dest,src,size) strncpy((dest),(src),(size))
#endif


/*
 * Open directory stream DIRNAME for read and return a pointer to the
 * internal working area that is used to retrieve individual directory
 * entries.
 */
static DIR*
opendir(
    const char *dirname)
{
  DIR *dirp;
  assert (dirname != NULL);
  assert (strlen (dirname) < MAX_PATH);

  /* construct new DIR structure */
  dirp = (DIR*) malloc (sizeof (struct DIR));
  if (dirp != NULL) {
    TCHAR *p;
   
    /* prepare search pattern */
#ifdef _UNICODE

    /* convert directory name to wide character string */
    MultiByteToWideChar(
        CP_ACP,                                /* code page */
        0,                                     /* conversion flags */
        dirname,                               /* mb-string to convert */
        -1,                                    /* length of mb-string */
        dirp->patt,                            /* wc-string to produce */
        MAX_PATH);                             /* max length of wc-string */
    dirp->patt[MAX_PATH] = '\0';
   
    /* append search pattern to directory name */
    p = wcschr (dirp->patt, '\0');
    if (dirp->patt < p  &&  *(p-1) != '\\'  &&  *(p-1) != ':') {
      *p++ = '\\';
    }
    *p++ = '*';
    *p = '\0';

#else /* !_UNICODE */
   
    /* take directory name... */
    STRNCPY (dirp->patt, dirname, sizeof(dirp->patt));
    dirp->patt[MAX_PATH] = '\0';
   
    /* ... and append search pattern to it */
    p = strchr (dirp->patt, '\0');
    if (dirp->patt < p  &&  *(p-1) != '\\'  &&  *(p-1) != ':') {
      *p++ = '\\';
    }
    *p++ = '*';
    *p = '\0';
   
#endif /* !_UNICODE */

    /* open stream and retrieve first file */
    dirp->search_handle = FindFirstFile (dirp->patt, &dirp->current.data);
    if (dirp->search_handle == INVALID_HANDLE_VALUE) {
      /* invalid search pattern? */
      free (dirp);
      return NULL;
    }

    /* there is an un-processed directory entry in memory now */
    dirp->cached = 1;
   
  }
  return dirp;
}


/*
 * Read a directory entry, and return a pointer to a dirent structure
 * containing the name of the entry in d_name field.  Individual directory
 * entries returned by this very function include regular files,
 * sub-directories, pseudo-directories "." and "..", but also volume labels,
 * hidden files and system files may be returned. 
 */
static struct dirent *
readdir(
    DIR *dirp)
{
  assert (dirp != NULL);

  if (dirp->search_handle == INVALID_HANDLE_VALUE) {
    /* directory stream was opened/rewound incorrectly or it ended normally */
    return NULL;
  }

  /* get next directory entry */
  if (dirp->cached != 0) {
    /* a valid directory entry already in memory */
    dirp->cached = 0;
  } else {
    /* read next directory entry from disk */
    if (FindNextFile (dirp->search_handle, &dirp->current.data) == FALSE) {
      /* the very last file has been processed or an error occured */
      FindClose (dirp->search_handle);
      dirp->search_handle = INVALID_HANDLE_VALUE;
      return NULL;
    }
  }

  /* copy directory entry to d_name */
#ifdef _UNICODE
 
  /* convert entry name to multibyte */
  WideCharToMultiByte(
      CP_ACP,                                  /* code page */
      0,                                       /* conversion flags */
      dirp->current.data.cFileName,            /* wc-string to convert */
      -1,                                      /* length of wc-string */
      dirp->current.d_name,                    /* mb-string to produce */
      MAX_PATH,                                /* max length of mb-string */
      NULL,                                    /* use sys default character */
      NULL);                                   /* don't care  */
  dirp->current.d_name[MAX_PATH] = '\0';
 
#else /* !_UNICODE */

  /* copy as a multibyte character string */
  STRNCPY (dirp->current.d_name, dirp->current.data.cFileName, sizeof(dirp->current.d_name));
  dirp->current.d_name[MAX_PATH] = '\0';

#endif /* !_UNICODE */
 
  return &dirp->current;
}


/*
 * Close directory stream opened by opendir() function.  Close of the
 * directory stream invalidates the DIR structure as well as any previously
 * read directory entry.
 */
static int
closedir(
    DIR *dirp)
{
  assert (dirp != NULL);
 
  /* release search handle */
  if (dirp->search_handle != INVALID_HANDLE_VALUE) {
    FindClose (dirp->search_handle);
    dirp->search_handle = INVALID_HANDLE_VALUE;
  }

  /* release directory handle */
  free (dirp);
  return 0;
}

此文件可從http://www.softagalleria.net/dirent/index.en.html下載得到,直接將它放在VS2005的include目錄就OK 了!

開(kāi)網(wǎng)店http://www.5678520.com/怎么樣開(kāi)網(wǎng)店

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            美女网站在线免费欧美精品| 欧美日韩福利在线观看| 亚洲欧美日韩精品| 好吊色欧美一区二区三区四区 | 国产精品久久国产三级国电话系列| 欧美国产日韩一区二区在线观看| 欧美精品色网| 国产精品亚发布| 国产亚洲欧美日韩一区二区| 黄色精品一区二区| 亚洲激情视频在线观看| 在线一区二区三区四区五区| 香蕉久久夜色精品| 免费观看成人鲁鲁鲁鲁鲁视频 | 欧美高清视频一区| 一本久久知道综合久久| 亚洲欧美日韩国产中文在线| 久久精品综合网| 欧美日韩国产精品一区二区亚洲| 国产精品女人久久久久久| 一区二区在线视频播放| 一本久久综合亚洲鲁鲁五月天| 欧美一级专区免费大片| 欧美电影打屁股sp| 亚洲欧美激情精品一区二区| 欧美www视频在线观看| 国产欧美三级| 一区二区三区蜜桃网| 久久久7777| 99视频精品全国免费| 快she精品国产999| 亚洲黄色在线视频| 99国内精品久久| 欧美中日韩免费视频| 欧美精品高清视频| 一区精品久久| 欧美一区二区黄| 亚洲精品在线观看免费| 久久久www成人免费精品| 欧美午夜在线视频| 亚洲精品日韩综合观看成人91| 久久国产66| 亚洲视频网站在线观看| 欧美搞黄网站| 亚洲人人精品| 久久久噜噜噜久噜久久| 亚洲一区在线观看视频| 欧美激情精品久久久久| 亚洲人午夜精品免费| 美女精品自拍一二三四| 久久成人免费日本黄色| 国产小视频国产精品| 亚洲综合欧美日韩| 日韩视频精品在线| 欧美看片网站| 亚洲精品视频免费在线观看| 欧美国产视频一区二区| 久久嫩草精品久久久精品| 韩国精品久久久999| 久久精品官网| 欧美一区二区三区免费在线看 | 久久久综合网站| 国产一区日韩欧美| 久久性色av| 久久综合给合久久狠狠狠97色69| 精品白丝av| 亚洲第一黄色网| 欧美极品aⅴ影院| 亚洲视频在线看| 中文国产亚洲喷潮| 国产精品视频导航| 久久se精品一区精品二区| 性感少妇一区| 亚洲大片在线观看| 亚洲茄子视频| 欧美日韩在线视频一区二区| 中文日韩在线视频| 性欧美大战久久久久久久免费观看 | 99国产精品久久久久久久| 最新国产の精品合集bt伙计| 欧美精品色一区二区三区| 日韩一级在线| 亚洲女人小视频在线观看| 国产农村妇女毛片精品久久麻豆 | 久久亚洲私人国产精品va媚药| 在线不卡中文字幕播放| 亚洲成人在线网| 欧美午夜不卡在线观看免费 | 亚洲欧美伊人| 亚洲欧美中日韩| 伊人成年综合电影网| 亚洲激情视频在线播放| 欧美午夜性色大片在线观看| 久久激情综合网| 欧美1区免费| 午夜精品久久久久久久99热浪潮| 欧美一区二区黄| 亚洲精品影视在线观看| 亚洲午夜影视影院在线观看| 经典三级久久| 亚洲视频在线一区观看| 一区二区三区无毛| 中文精品视频一区二区在线观看| 国内精品视频在线播放| 亚洲精品免费看| 韩日精品中文字幕| 一区二区三区精品| 亚洲日本va午夜在线影院| 午夜国产不卡在线观看视频| 亚洲精品日韩精品| 欧美在线影院在线视频| 在线亚洲+欧美+日本专区| 久久久国产午夜精品| 先锋亚洲精品| 欧美日韩视频专区在线播放| 欧美成人精品一区二区三区| 国产欧美一区二区精品忘忧草| 亚洲精品久久久久久一区二区 | 久久青草久久| 久久成人一区| 国产精品久久久久久久9999| 亚洲国产色一区| 亚洲国产成人91精品| 久久成人一区| 新狼窝色av性久久久久久| 欧美视频在线视频| 亚洲精品国久久99热| 亚洲日本va在线观看| 美女爽到呻吟久久久久| 老色鬼精品视频在线观看播放| 国产九区一区在线| 亚洲午夜未删减在线观看| 一区二区三区欧美激情| 欧美精品日本| 亚洲精品一区在线观看香蕉| 亚洲精品久久久久久久久久久| 免费在线看成人av| 亚洲日本理论电影| 性色一区二区| 免费欧美视频| 国产精品尤物福利片在线观看| 最新国产成人av网站网址麻豆| 怡红院精品视频在线观看极品| 欧美在线视频免费观看| 久久久999精品免费| 国产亚洲欧美另类一区二区三区| 亚洲欧美伊人| 久久一区激情| 91久久亚洲| 欧美激情网站在线观看| 亚洲精品一区在线观看香蕉| 亚洲一区二区三区影院| 国产精品蜜臀在线观看| 欧美一区2区三区4区公司二百| 久久精品99无色码中文字幕| 国内精品久久久久伊人av| 久久人人97超碰国产公开结果| 欧美成人网在线| 一区二区三区久久网| 国产精品一区在线播放| 久久黄色网页| 亚洲欧洲精品一区二区三区 | 国产亚洲成av人在线观看导航| 午夜视频久久久| 另类av导航| 一区二区三欧美| 国产精品综合av一区二区国产馆| 久久成人精品无人区| 欧美激情精品久久久六区热门| 正在播放亚洲| 国产一区二区0| 欧美激情亚洲综合一区| 亚洲影视九九影院在线观看| 裸体女人亚洲精品一区| 宅男噜噜噜66一区二区66| 国产日产亚洲精品系列| 麻豆精品网站| 亚洲欧美日韩国产中文| 亚洲高清在线精品| 久久国产精品99久久久久久老狼| 亚洲国产精品va| 国产精品女主播一区二区三区| 久久久久国产免费免费| 亚洲精品国产精品国自产观看浪潮| 亚洲一区二区在| 亚洲激情一区| 国语自产精品视频在线看| 欧美日韩高清在线| 久久米奇亚洲| 性8sex亚洲区入口| 亚洲免费高清| 欧美激情一区二区三区蜜桃视频| 亚洲欧美一级二级三级| 亚洲美女性视频| 好看不卡的中文字幕| 国产精品久久久免费| 欧美激情亚洲国产| 久久资源在线| 久久噜噜亚洲综合| 欧美中文字幕久久|