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

posts - 319, comments - 22, trackbacks - 0, articles - 11
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

找不到 dirent.h 文件

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

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

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

 

dirent.h是gcc下的一個頭文件,而在VS2005中是沒有的。這個文件中封裝了幾個對目錄進行操作函數:

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

 對于在linux->windows之間進行程序移植來講常常會造成一些困擾,在網上仔細搜了一下,發現原來已經有位好同志寫了相應的移植代碼,如下所示:


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 了!

開網店http://www.5678520.com/怎么樣開網店

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品国产精品| 亚洲第一主播视频| 久久se精品一区精品二区| 亚洲一区二区三区在线| 亚洲自拍高清| 欧美在线播放高清精品| 久久综合中文色婷婷| 欧美大片免费久久精品三p| 亚洲欧洲日韩在线| 亚洲国产精品成人综合色在线婷婷| 国内精品伊人久久久久av一坑| 好看的av在线不卡观看| 亚洲精品国产欧美| 亚洲摸下面视频| 久久精品国产一区二区三区免费看 | 夜夜精品视频| 国产精品久久久一区二区三区| 欧美日韩精品一区二区天天拍小说| 国产精品成人av性教育| 国产婷婷一区二区| 亚洲精品自在久久| 欧美在线3区| 91久久精品美女| 亚洲国产欧美一区二区三区久久 | 国产精品一二一区| 亚洲国产精品久久久久秋霞蜜臀| 国产精品99久久久久久宅男| 久久久999国产| 99国产精品99久久久久久粉嫩| 国产欧美精品日韩区二区麻豆天美| 一区二区亚洲精品| 亚洲在线播放电影| 欧美黄色aa电影| 亚洲欧美日韩国产一区| 欧美日韩成人一区二区三区| 国产真实久久| 亚洲欧美日韩国产成人精品影院| 欧美大片在线观看| 欧美一区成人| 久久久水蜜桃av免费网站| 99精品视频免费观看| 久久久久综合网| 亚洲天天影视| 欧美日韩国产黄| 亚洲第一网站免费视频| 久久久久国色av免费观看性色| 99精品免费| 欧美激情精品久久久久久蜜臀| 伊人久久大香线蕉综合热线| 久久av在线| 亚洲欧美日韩精品久久久| 欧美午夜激情在线| 9久草视频在线视频精品| 亚洲国产另类 国产精品国产免费| 久久久精品动漫| 激情综合电影网| 另类av一区二区| 久久免费精品视频| 在线观看日韩av| 噜噜噜久久亚洲精品国产品小说| 久久精品国产精品| 黄色成人av在线| 猫咪成人在线观看| 久久婷婷国产麻豆91天堂| 国产中文一区| 裸体女人亚洲精品一区| 久久亚洲国产精品一区二区| 国内精品美女av在线播放| 久久久噜久噜久久综合| 久久久久久久久久久久久久一区| 极品尤物一区二区三区| 欧美国产三区| 欧美日韩第一页| 亚洲综合二区| 欧美亚洲视频在线观看| 永久免费精品影视网站| 亚洲国产精品福利| 欧美三日本三级少妇三2023| 亚洲欧美在线播放| 久久大逼视频| 亚洲精品之草原avav久久| 9久草视频在线视频精品| 国产麻豆综合| 欧美成人xxx| 国产精品福利在线| 久久久久久香蕉网| 欧美波霸影院| 欧美在线免费| 欧美大片va欧美在线播放| 亚洲视频观看| 久久精品中文字幕一区| 夜夜夜久久久| 久久成人精品无人区| 艳妇臀荡乳欲伦亚洲一区| 亚洲影视中文字幕| 亚洲黄色在线视频| 亚洲免费在线看| 91久久久久久久久| 亚洲一区尤物| 日韩一级黄色av| 久久精品道一区二区三区| 狂野欧美激情性xxxx| 欧美黄色日本| 久久精品天堂| 欧美精品一区二区视频| 亚洲欧美日韩综合国产aⅴ | 欧美日韩精品欧美日韩精品| 久久久久99精品国产片| 欧美伦理a级免费电影| 开元免费观看欧美电视剧网站| 欧美成人自拍| 久热精品视频在线| 国产精品久久久久久久午夜| 牛人盗摄一区二区三区视频| 国产精品自拍三区| 亚洲欧洲一区二区在线播放| 国产综合久久久久久鬼色| 一本色道久久99精品综合| 亚洲国产成人91精品| 香蕉国产精品偷在线观看不卡| 一区二区三区产品免费精品久久75| 欧美中在线观看| 欧美一级视频免费在线观看| 欧美日本久久| 亚洲国产99| 亚洲电影第1页| 久久精品国产精品亚洲| 久久精品国产亚洲一区二区三区 | 日韩一区二区高清| 久久人人97超碰精品888| 久久av一区| 国产一区激情| 久久国产精品久久久久久久久久 | 亚洲尤物视频网| 欧美日韩综合精品| 亚洲乱码国产乱码精品精98午夜| 亚洲精品1234| 欧美激情1区| 亚洲人成亚洲人成在线观看| 亚洲国产成人av在线| 欧美a级在线| 欧美大片一区| 亚洲精选一区| 欧美日本不卡| 日韩视频免费在线| 亚洲综合首页| 国产精品久久久爽爽爽麻豆色哟哟| 一区二区精品国产| 性欧美1819sex性高清| 国产精品av久久久久久麻豆网| 亚洲免费不卡| 先锋a资源在线看亚洲| 国产一区二区三区四区三区四 | 亚洲黄色在线看| 欧美激情第8页| 一区二区三区国产盗摄| 羞羞答答国产精品www一本| 国产精品有限公司| 久久大逼视频| 久久精品国产99精品国产亚洲性色| 亚洲人在线视频| 欧美激情国产日韩精品一区18| 9l国产精品久久久久麻豆| 久久本道综合色狠狠五月| 在线观看亚洲专区| 欧美日韩在线直播| 午夜精品影院| 亚洲福利国产| 午夜在线观看免费一区| 影音先锋一区| 欧美性大战xxxxx久久久| 欧美在线视频二区| 亚洲精品中文在线| 久久精品国产99国产精品澳门| 影音先锋久久精品| 国产精品国产精品| 美女图片一区二区| 亚洲一区二区不卡免费| 欧美国产视频在线| 久久国产免费| 999在线观看精品免费不卡网站| 国产精品区一区二区三| 免费日韩av| 欧美亚洲一区| 日韩视频精品在线| 欧美国产日韩亚洲一区| 久久成人精品视频| 亚洲午夜久久久久久久久电影院 | 99精品国产高清一区二区| 国产三级精品三级| 欧美日韩国产黄| 美日韩精品视频免费看| 亚洲欧美日韩另类| 亚洲日本免费电影| 欧美国产精品中文字幕| 久久精品av麻豆的观看方式| 一本一本久久| 亚洲美女黄网| 亚洲欧洲精品一区二区三区不卡 | 免费视频最近日韩|