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

隨感而發

雜七雜八

統計

留言簿(13)

閱讀排行榜

評論排行榜

文件夾的遍歷掃描

用windows的API實現文件夾的遍歷掃描的程序
使用到的API:
FindFirstFile
FindNextFile
FindClose
主要用到的結構:
WIN32_FIND_DATA
在msdn都有詳細的說明。這里也簡要說明一下:
HANDLE WINAPI FindFirstFile(
  __in          LPCTSTR lpFileName, //要查找的文件路徑
  __out         LPWIN32_FIND_DATA lpFindFileData//保存文件結構的指針
);
查找對應的路徑,如果查找返回查找的句柄,然后我們可以通過該句柄去查找下一個和關閉這個句柄。
如果查找失敗,則返回(INVALED_HANDLE_VALUE)(-1),可以通過GetLastError();來得到他的錯誤類型。(貌似我都沒有這么做過。不過對于嚴謹的程序員們,可能很重要,不過這個也是寫給自己看的,就不考慮那么多了。哈哈)
注意:查找第一個的時候,他不僅返回了查找的句柄,他也把第一個的文件信息保存在lpFindFileData里面了。所以這個也是要處理的。
WIN32_FIND_DATA的結構就是一個結構提,在這里我智慧用到cFileName(文件名)和dwFileAttributes(文件屬性)兩個域。

BOOL WINAPI FindNextFile(
  __in          HANDLE hFindFile, //查找的文件句柄
  __out         LPWIN32_FIND_DATA lpFindFileData//保存文件結構的指針
);

他就是在文件句柄的情況下查找下一個文件。并將文件信息保存在lpFindFileData中。成功返回true,失敗返回false(就是沒有下一個了)

BOOL WINAPI FindClose(
  __in_out      HANDLE hFindFile
);
就是關閉文件句柄咯,沒有什么好說的哈。

要試用的函數介紹完畢。主要的思路:

查找他是要給文件路徑的。對了,只給文件夾路徑還不可以,必須還要加上\\*.*等查找的過濾關鍵字。否則他只找到文件夾,呵呵。過濾的關鍵字也可是?*.*?什么什么的組合都可以可以例如:abc?f*.t?t*這樣。

確定好文件路徑之后,調用FindFirstFile函數來查找,記得要檢查他是否成功哦!還有就是如果成功,第一個查找到的信息已經保存在lpFindFileData里面了。

因為第一個信息已經保存在里面了,而下面還要查找很多下一個,這里必須用到循環了。那么用什么循環呢。看FindNextFile()就知道要用while,不過且慢,上面不是有一個還要處理嘛。難道要先處理完了再用while?no,我們用do while;這樣就可以先處理,然后在循環,直到查找完畢。(之所以寫這些是因為我開始是用的WHILE發現總是少一個,后來才知道first的時候已經有一個了,所以才用了do while哎。。)

循環體:出來單個查找的內容,這里有幾個要注意的是文件夾里面有".." 和"."兩個查找到的不用處理,我也不知道他是干什么的,是網上查到的。呵呵。然后就是判斷是否為文件夾(if(findFileData.dwAttributes & FILE_ATTRIBUTE_DIRECTORY));。否則就不是文件夾,是文件。
然后在分開處理他們。。

最后不要忘了要關閉句柄。FileClose(hFind);

主要思路就是這些了。呵呵。。源代碼奉上:

 1 #include<iostream>
 2 #include <Windows.h>
 3 #include <string>
 4 #include <assert.h>
 5 
 6 typedef bool (*FindProc)(const char* chFinleName);
 7 
 8 //遍歷文件夾,chFolderPath為要遍歷的文件夾路徑。chFilter為遍歷文件夾的過濾器,例如*.txt等
 9 bool FindFolder(const char* chFolderPath, const char* chFilter, bool bFindFolder, FindProc pFindProc)
10 {
11     assert(pFindProc);
12     int nPathLen = strlen(chFolderPath) + MAX_PATH;
13     char* pChPath = new char[nPathLen];
14     sprintf_s(pChPath, nPathLen, "%s\\%s", chFolderPath, chFilter);
15     WIN32_FIND_DATA fileFindData;
16     HANDLE hFind = ::FindFirstFile(pChPath, &fileFindData);            //找到第一個
17     
18     if (hFind == INVALID_HANDLE_VALUE)        //如果沒有找到相關的文件信息,返回false
19     {
20         delete pChPath;
21         return false;
22     }
23 
24     //處理之后查找下一個,直到都找完
25     do 
26     {
27         if (fileFindData.cFileName[0== '.')
28         {
29             continue;            //因為文件夾開始有"."和".."兩個目錄,要過濾掉
30         }
31 
32         sprintf_s(pChPath, nPathLen, "%s\\%s", chFolderPath, fileFindData.cFileName);    //文件的完整路徑
33 
34         //如果要查找遞歸查找文件夾
35         if (bFindFolder && (fileFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
36         {
37             FindFolder(pChPath, chFilter, bFindFolder, pFindProc);            //遞歸調用來查找他的子目錄
38         }
39 
40         //如果是文件
41         pFindProc(pChPath);
42 
43     }while (::FindNextFile(hFind, &fileFindData)); 
44 
45     FindClose(hFind);                //關閉查找句柄
46     delete pChPath;    
47     return true;
48 }
49 
50 bool PrintFiles(const char* chFileName)
51 {
52     printf("%s\n", chFileName);
53     return true;
54 }
55 int main()
56 {
57     
58     FindFolder("test""*.*"true&PrintFiles);
59     getchar();
60 
61     return 0;
62 }

 

posted on 2009-03-30 14:13 shongbee2 閱讀(4279) 評論(1)  編輯 收藏 引用

評論

# re: 文件夾的遍歷掃描 2010-05-09 12:40 冒泡

看老兄也是牛人一個,怎么會連.和..是做什么用的都不知道呢?  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩一区视频| 亚洲宅男天堂在线观看无病毒| 国产精品无码永久免费888| 中文日韩电影网站| 亚洲国产专区校园欧美| 国产伦理一区| 国产精品日韩在线观看| 91久久久在线| 亚洲桃色在线一区| 亚洲婷婷在线| 免费短视频成人日韩| 亚洲高清在线视频| 日韩一级精品视频在线观看| 亚洲激情电影在线| 在线视频一区二区| 欧美日韩午夜在线视频| 久久中文欧美| 欧美黄色一区二区| 麻豆视频一区二区| 欧美成人精品在线视频| 欧美精品aa| 国产欧美精品在线| 亚洲国产成人精品视频| 亚洲精品欧美专区| 国产精品vvv| 欧美调教vk| 国产原创一区二区| 亚洲人体影院| 亚洲精品久久久久久久久久久久久| 一本久久综合亚洲鲁鲁| 午夜精品福利一区二区三区av| 久久综合给合久久狠狠色| 亚洲电影免费| 欧美激情1区| 亚洲亚洲精品三区日韩精品在线视频 | 欧美va天堂va视频va在线| 亚洲国产精品va在看黑人| 免费精品视频| 国产精品视频999| 国产一区二区欧美日韩| 99国产精品99久久久久久| 欧美在线1区| 日韩天天综合| 国产午夜亚洲精品羞羞网站| 亚洲精品美女在线观看| 日韩视频一区| 国产亚洲一本大道中文在线| 欧美成人精品一区二区| 免费亚洲婷婷| 国产精品系列在线播放| 老司机精品导航| 香蕉久久久久久久av网站| 欧美激情久久久| 午夜天堂精品久久久久| 亚洲精品中文字幕在线观看| 久久九九全国免费精品观看| 一区二区三区高清在线| 国产免费观看久久黄| 男女激情久久| 国产精品成人一区| 亚洲欧美视频| 蜜桃久久精品乱码一区二区| 亚洲性视频h| 亚洲精品在线免费观看视频| 国产性天天综合网| 亚洲精品视频一区| 精品999在线播放| 久久久久久久久久久一区| 中文在线一区| 亚洲激情在线激情| 欧美激情视频给我| 久久精品女人的天堂av| 美女被久久久| 国产精品一区二区黑丝| 亚洲国产精品一区| 国模吧视频一区| 亚洲午夜在线观看| 国产精品夜夜夜| 亚洲精品综合精品自拍| 在线观看三级视频欧美| 欧美成人一区二区| 欧美不卡一卡二卡免费版| 久久久久国产精品一区| 国产精品久久久久aaaa樱花| 亚洲国产成人久久综合一区| 狠狠网亚洲精品| 亚洲大片在线观看| 国产亚洲一二三区| 久久成人18免费网站| 亚洲国产小视频在线观看| 亚洲欧美日韩国产成人| 亚洲欧美另类中文字幕| 亚洲欧美国产三级| 黄色亚洲精品| 性感少妇一区| 久久精品中文字幕免费mv| 国产精品青草综合久久久久99| 99精品国产热久久91蜜凸| 国产乱码精品一区二区三区av| 亚洲精品免费一区二区三区| 亚洲精品日韩激情在线电影 | 国产精品成人观看视频免费| 日韩亚洲成人av在线| 亚洲天天影视| 国产情侣久久| 久久人人爽国产| 亚洲视频网站在线观看| 欧美日韩国产页| 久久久精品免费视频| 国产一区二区三区观看| 欧美一区激情| 亚洲午夜精品在线| 国产精品jvid在线观看蜜臀| 亚洲一区二区三区欧美| 亚洲黄页视频免费观看| 欧美福利一区二区三区| 日韩亚洲欧美成人| 亚洲欧美综合精品久久成人 | 亚洲精品视频啊美女在线直播| 欧美激情bt| 亚洲在线视频网站| 麻豆成人在线| 99国产精品私拍| 国产日韩精品一区二区三区在线 | 亚洲精品久久嫩草网站秘色| 欧美日韩一区二区在线视频| 亚洲欧美视频在线| 欧美中文字幕在线播放| 欧美日韩一区综合| 亚洲一区二区在线看| 久久久久久久网| 日韩一级精品视频在线观看| 国产精品无码专区在线观看| 美女精品一区| 亚洲欧美成人一区二区在线电影 | 久久aⅴ乱码一区二区三区| 欧美激情亚洲自拍| 中文久久乱码一区二区| 美女国产一区| 亚洲欧美成人一区二区在线电影| 国产一区999| 欧美日韩免费观看一区| 久久大逼视频| 亚洲小说欧美另类社区| 欧美韩日精品| 久久视频国产精品免费视频在线| 国产精品入口| 欧美电影专区| 欧美一区午夜精品| 夜夜狂射影院欧美极品| 蜜桃久久av| 午夜精品久久久久久久久久久久| 亚洲欧洲日韩女同| 国产亚洲精品激情久久| 欧美日韩和欧美的一区二区| 久久久久久久激情视频| 欧美大秀在线观看| 欧美一级一区| 好吊色欧美一区二区三区四区| 欧美日韩国产丝袜另类| 欧美777四色影视在线| 久久国产精品99国产| 亚洲已满18点击进入久久| 91久久在线视频| 欧美激情精品| 欧美成人午夜激情在线| 久久久久久久波多野高潮日日| 亚洲主播在线播放| 一区二区精品| 国产亚洲精品aa| 国产精品xxxav免费视频| 欧美精品色网| 欧美另类videos死尸| 亚洲午夜久久久久久尤物 | 日韩一区二区精品| 91久久精品国产91久久性色| 欧美激情第一页xxx| 亚洲国产精品久久久久婷婷884 | 欧美大色视频| 亚洲黄色一区| 亚洲第一在线视频| 免费影视亚洲| 亚洲国产精品v| 日韩亚洲不卡在线| 亚洲一区精品电影| 午夜精品久久久久久久久久久久久| 亚洲无限av看| 欧美一区日本一区韩国一区| 欧美一区二区三区在线观看视频 | 国产区亚洲区欧美区| 国产丝袜一区二区| 激情综合色综合久久综合| 国产一区二区三区免费在线观看| 国产人成一区二区三区影院| 国产一区二区三区奇米久涩| 影音先锋中文字幕一区| 亚洲精品视频免费| 亚洲欧美精品中文字幕在线| 久久免费黄色| 91久久久久久国产精品|