線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4868
推到 Plurk!
推到 Facebook!

如何找目錄及其子目錄底下的檔案

尚未結案
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-16 14:31:55 IP:140.112.xxx.xxx 未訂閱
如何找目錄及其子目錄底下的檔案
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-16 15:06:22 IP:61.228.xxx.xxx 未訂閱
可以使用WIN32 API的FindFirstFile以及FindNextFile.
limeca
中階會員


發表:2
回覆:74
積分:60
註冊:2005-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-16 21:47:02 IP:61.230.xxx.xxx 未訂閱
您可以參考這篇文章, 這篇是搜尋硬碟中的exe檔...站上的資源蠻多的~ http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44946
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-17 08:15:54 IP:140.112.xxx.xxx 未訂閱
可是FindFirstFile以及FindNextFile只能尋找該目錄下的檔案, 無法找到子目錄下的檔案
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-17 08:36:14 IP:218.19.xxx.xxx 未訂閱
a120803 您好:    您可以將找尋檔案的動作寫成一個自定函式,並以要找尋內容的目錄為傳入參數,並且在碰到目錄時以遞迴的方式來呼叫相同函式,這樣子就可以找出指定目錄內的所有目錄與檔案了。    以下給您一個範例,這是從我的程式中節錄出來的,這個自定函式是計算指定目錄內的檔案數量,您可以視需要自行更改成您所要的功能:    呼叫方式: int dcnt = CalcDirs("C:\\BCB"); // 取得 C:\BCB 目錄下的檔案數量 自定函式內容:
int __fastcall TaskReadDirTree::CalcDirs(AnsiString RootDir)
{
    int tmpcnt = 0;        chdir(RootDir.c_str());  // 切換到指定目錄去        TSearchRec Sr;  // 設 Sr 為存放檔案資訊的結構變數        int done = FindFirst("*.*", faDirectory, Sr);
    while(done == 0){
        if(Sr.Attr & faDirectory){  // 如果是目錄
            if(Sr.Name != "." && Sr.Name != ".."){  // 如果不是相對目錄代碼的話
                tmpcnt  ;
                TotalDirs  ;                    int aa = CalcDirs(Sr.Name.c_str()); // 如果是目錄的話就遞迴處理                    tmpcnt  = aa;
                chdir(String("..").c_str());  // 切換回前一層目錄
            }
        }else{  // 如果是檔案 (檔案的相關資訊可由 Sr 結構變數中取得)
            TotalFiles  ;
        }
        done = FindNext(Sr);
    }        FindClose(Sr);        return tmpcnt;
}
7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/06/17 08:59:50
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-19 14:32:36 IP:61.228.xxx.xxx 未訂閱
給你一個利用FindFirstFile和FindNextFile列出檔案名稱(包含子目錄)的範例.
#include 
#include 
#include 
using namespace std;
void ShowFiles(string);
int main(int argc, char *argv[])
{
    string dir("c:");
    ShowFiles(dir);
    system("PAUSE");
    return EXIT_SUCCESS;
}
void ShowFiles(string szDirPath)
{
    HANDLE hFile;
    WIN32_FIND_DATA wfd;    
    if(szDirPath[szDirPath.size()-1]!='\\')
    szDirPath ="\\";    
    hFile=FindFirstFile((szDirPath "*.*").c_str(),&wfd);
    if(hFile!=INVALID_HANDLE_VALUE)
    {
    do {            if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
           &&(string(wfd.cFileName)!=".")
           &&(string(wfd.cFileName)!=".."))
           {                                          
           ShowFiles(szDirPath string(wfd.cFileName));
           }else {                
                 cout<     
        
系統時間:2024-06-15 22:18:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!