1. 程式人生 > >使用C++獲取目錄下的指定檔案:結構體_finddata_t 以及函式_findfirst、_findnext、_fineclose

使用C++獲取目錄下的指定檔案:結構體_finddata_t 以及函式_findfirst、_findnext、_fineclose

    獲取資料夾裡面下面的相同的檔案是經常用的一個操作,比如我們需要獲取檔案下面所有的.exe檔案,這個時候我們就需要一個結構體和三個函式來幫助我們。

    首先需要的結構體:struct _finddata_t

    這個結構體就是用來儲存和檔案有關的資訊,其結構以及含義如下:

 struct _finddata_t
 {
       //檔案屬性的儲存位置。它儲存一個unsigned單元,用於表示檔案的屬性。檔案屬性是用位表示的,主要有以下一些:_A_ARCH(存檔)、_A_HIDDEN(隱藏)、_A_NORMAL(正常)、_A_RDONLY(只讀)、_A_SUBDIR(資料夾)、_A_SYSTEM(系統)
       unsigned attrib;
       //這裡的time_t是一個變數型別(長整型?相當於long int?),用來儲存時間的,我們暫時不用理它,只要知道,這個time_create變數是用來儲存檔案建立時間的就可以了
       time_t time_create;
       //檔案最後一次被訪問的時間
       time_t time_access;
       //檔案最後一次被修改的時間
       time_t time_write;
       //檔案的大小。這裡的_fsize_t應該可以相當於unsigned整型,表示檔案的位元組數
       _fsize_t size;
       //檔案的檔名。這裡的_MAX_FNAME是一個常量巨集,它在<stdlib.h>標頭檔案中被定義,表示的是檔名的最大長度
       char name[_MAX_FNAME];
 };

除了上述的結構體,還需要有三個函式:_findfirst,_findnext,_findclose,下面一一介紹

long _findfirst( char *filespec, struct _finddata_t *fileinfo )

引數:    標明檔案的字串      用來存放檔案資訊的結構體指標
返回值:如果查詢成功,將返回一個long型的唯一的查詢用的控制代碼,這個控制代碼將在_findnext函式中將被使用
              失敗則返回-1

int _findnext( long handle, struct _finddata_t *fileinfo );

引數:由_findfirst返回的值     用來存放檔案資訊的結構體指標,找到檔案之後,函式將檔案的資訊放在結構體中
返回值:成功返回0,失敗返回-1

int _findclose( long handle );

引數:由_findfirst返回的查詢檔案的控制代碼
返回值:成功返回0,失敗返回-1,

    通常的思路我們是使用_findfirst函式來開始查詢對應的字串,然後使用_findnext函式來查詢剩餘的檔案,最後使用_findclose函式來關閉控制代碼,然後三個函式裡面傳的引數都會使用到的一個:struct _finddata_t 的一個結構體指標