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

如何搜尋一電腦例如C槽所有目錄下的 *.DOC的檔案,並把他上傳到FTP?

答題得分者是:kenlee1109
wishmaster926
初階會員


發表:91
回覆:69
積分:32
註冊:2006-12-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-06-20 18:54:58 IP:61.228.xxx.xxx 訂閱
老闆交待要寫一程式,一點選執行後,這程式可自動搜尋電腦C槽內所有目錄下的 *.DOC的檔案,並可把他上傳到公司的FTP,
上傳FTP我預計用NMFTP元件來做,是沒問題.但搜尋檔案部份不知大大們有啥好的方法或建議.
因為我以前用過的 FINDNEXT函數他也只能搜尋單一目錄下的檔案阿???要如何做到我可將C槽內所有
目錄下 *.DOC 的檔案都可抓到???請賜教,多謝!!!!
------
~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~
~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~
~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~
davidsun
初階會員


發表:57
回覆:71
積分:25
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-06-21 02:40:59 IP:218.211.xxx.xxx 訂閱
你已經只到使用 FindFirst , FindNext 去找到目錄下的所有檔案 ( 依照你的需求,只需要 doc 檔), 在 FindNext 中,我們會使用到 TSearchRec ,而在 TSearchRec 結構中會有一個 attr 的屬性,這是一個 int 變數,如果值是 16 ,表示這個是目錄名稱,此時再使用遞迴重複呼叫相同的函數,不就可以找到此目錄下所有你想要找的檔案(包括次目錄)
wishmaster926
初階會員


發表:91
回覆:69
積分:32
註冊:2006-12-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-06-21 03:04:28 IP:220.142.xxx.xxx 訂閱

===================引 用 davidsun 文 章===================
你已經只到使用 FindFirst , FindNext 去找到目錄下的所有檔案 ( 依照你的需求,只需要 doc 檔), 在 FindNext 中,我們會使用到 TSearchRec ,而在 TSearchRec 結構中會有一個 attr 的屬性,這是一個 int 變數,如果值是 16 ,表示這個是目錄名稱,此時再使用遞迴重複呼叫相同的函數,不就可以找到此目錄下所有你想要找的檔案(包括次目錄)

感謝大大,我試試看後再來回帖,感恩!!!!!
------
~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~
~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~
~~~~~~~~時時多爬文 勿使惹塵埃~~~~~~~~
kenlee1109
初階會員


發表:20
回覆:40
積分:27
註冊:2006-08-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-06-27 01:16:26 IP:118.169.xxx.xxx 訂閱
我最近寫的程式,是以遞迴方式找出所有的 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);
}

系統時間:2024-03-29 19:07:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!