如何搜尋一電腦例如C槽所有目錄下的 *.DOC的檔案,並把他上傳到FTP? |
答題得分者是:kenlee1109
|
wishmaster926
初階會員 發表:91 回覆:69 積分:32 註冊:2006-12-13 發送簡訊給我 |
老闆交待要寫一程式,一點選執行後,這程式可自動搜尋電腦C槽內所有目錄下的 *.DOC的檔案,並可把他上傳到公司的FTP,
上傳FTP我預計用NMFTP元件來做,是沒問題.但搜尋檔案部份不知大大們有啥好的方法或建議. 因為我以前用過的 FINDNEXT函數他也只能搜尋單一目錄下的檔案阿???要如何做到我可將C槽內所有 目錄下 *.DOC 的檔案都可抓到???請賜教,多謝!!!!
------
~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~ ~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~ ~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~ |
davidsun
初階會員 發表:57 回覆:71 積分:25 註冊:2002-04-14 發送簡訊給我 |
|
wishmaster926
初階會員 發表:91 回覆:69 積分:32 註冊:2006-12-13 發送簡訊給我 |
===================引 用 davidsun 文 章=================== 你已經只到使用 FindFirst , FindNext 去找到目錄下的所有檔案 ( 依照你的需求,只需要 doc 檔), 在 FindNext 中,我們會使用到 TSearchRec ,而在 TSearchRec 結構中會有一個 attr 的屬性,這是一個 int 變數,如果值是 16 ,表示這個是目錄名稱,此時再使用遞迴重複呼叫相同的函數,不就可以找到此目錄下所有你想要找的檔案(包括次目錄) 感謝大大,我試試看後再來回帖,感恩!!!!!
------
~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~ ~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~ ~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~ |
kenlee1109
初階會員 發表:20 回覆:40 積分:27 註冊:2006-08-17 發送簡訊給我 |
我最近寫的程式,是以遞迴方式找出所有的 forder 及 file.除了找之外,還可以下參數是要殺檔還是連目錄一起殺.大概是這樣.
BStringField 是我寫的 class,沒有特別的地方,這個 class 包含 Name 及 Value 及 Type 三項 AnsiString. BStringRecord 就是 TList Set, BStringTable 就是要包含 BStringRecord 的 TListSet. 僅是如此. 因為功能中有要殺目錄,所以產生的結果是可以依序看檔殺檔,看目錄殺目錄,因檔案沒殺完不能殺目錄. ps:隱藏檔也找得到,因 FindFirst 參數中有包含. //--------------------------------------------------------------------------- int __fastcall BLIB::FindAllSubDir(AnsiString pathName, BStringRecord *collectSet, int delAllFile, int delForder){ BStringRecord *collectBuf = NULL; BStringRecord *workBuf; AnsiString curDirectory = GetCurrentDir(); BStringField *r; if(!DirectoryExists(pathName)) return 0; workBuf = collectSet; if(!collectSet){ collectBuf = new BStringRecord; workBuf = collectBuf; } FindAllSubDirProcess(pathName, workBuf, delAllFile, delForder); SetCurrentDir(curDirectory); if(delAllFile || delForder){ for(int i = 0; i < workBuf->Count; i ){ r = (BStringField*) workBuf->Items[i]; if((r->Type == 0)&&(delAllFile)){ DeleteFile(r->Name); } else if((r->Type == 1)&&(delForder)){ int count = 0; while(DirectoryExists(r->Name)){ RemoveDir(r->Name); Sleep(10); count ; if(count > 10) break; } } } } if(collectBuf) delete collectBuf; return 1; } //--------------------------------------------------------------------------- void __fastcall BLIB::FindAllSubDirProcess(AnsiString pathName, BStringRecord *collectSet, int delAllFile, int delForder){ TSearchRec *sr; BStringField *s, *d; AnsiString str, oldPath; AnsiString findPath; BOOL ans; BStringRecord *stringSet = NULL; int iAttributes = 0; sr = new TSearchRec; iAttributes |= faReadOnly; iAttributes |= faHidden; iAttributes |= faSysFile; iAttributes |= faVolumeID; iAttributes |= faDirectory; iAttributes |= faArchive; iAttributes |= faAnyFile; findPath = pathName; findPath = "*.*"; if(FindFirst(findPath, iAttributes, (TSearchRec&)*sr) == 0){ do{ if((sr->Name != ".")&&(sr->Name != "..")){ if(sr->Attr & faDirectory){ if(!stringSet) stringSet = new BStringRecord; s = new BStringField; s->Name = pathName; s->Name = sr->Name; s->Name = "\\"; s->Type = 1; stringSet->Add(s); } else{ sr->Name.LowerCase(); str = pathName; str = sr->Name; s = new BStringField; s->Name = str; s->Type = 0; collectSet->Add(s); } } }while (FindNext((TSearchRec&)*sr) == 0); FindClose(*sr); } delete sr; if(stringSet){ for(int i = 0; i < stringSet->Count; i ){ s = (BStringField*) stringSet->Items[i]; FindAllSubDirProcess((AnsiString)s->Name, collectSet, delAllFile, delForder); } } if(stringSet) delete stringSet; s = new BStringField; s->Name = pathName; s->Type = 1; collectSet->Add(s); } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |