2013-03-15 144 views
2

我想寫一個LS代理來掃描窗口中的目錄,例如:'C:\'用於任何文件和子目錄。對於每個子目錄,它將進入並搜索更多的文件和子目錄,並繼續進行,直至找不到更多的目錄。我習慣於編寫遞歸代碼來替換或刪除長字符串中的字符,但對於這一個我完全失去了。下面是我的代碼(它的代碼從Domino幫助文件的混合和一個我在IBM網站上發現):Lotusscript搜索窗口目錄的子目錄和文件。遞歸?

Sub Initialize 
    Dim pathname As String, filename As String 
    pathname = "C:\*.*" 
    filename = Dir(pathname, 16) 
    Print "Begin scan" 
    Do While filename<>"" 
     If IsDir(pathname+filename)=True Then 
      Print pathname+filename+" is a directory" 
      'look for more directories and files in here 
     Else 
      Print filename+" is a file" 
     End If 
     filename=Dir() 
    Loop 
    Print "Finish scan" 
End Sub 

Function IsDir(Path As String) As Integer 
    Dim Void& 
    Dim Result As Boolean 
    On Error GoTo ErrorHandler 
    Void=FileLen(Path) 
    Result=False 
    GoTo Over 
ErrorHandler: 
    Result=True 
    Resume Over 
Over: 
    IsDir=Result 
End Function 

什麼我需要改變,以使代碼遞歸在評論部分? ('在這裏尋找更多的目錄和文件)。我不只是試圖找到一個特定的文件或目錄。我想要所有這一切。如果我能夠做到這一點,那麼我可以檢索它們並保存到NotesDocument中。

回答

6

我用this solution幾次和它的作品一種享受:

+1

只是爲了補充一點。有一個已知問題,其中DIR $可以鎖定文件夾(如果您計劃以遞歸方式刪除)。 SPR SODY85SM84。更多詳情請點擊http://www-10.lotus.com/ldd/nd85forum.nsf/5f27803bba85d8e285256bf10054620d/322e819311441a5a8525772e005d0078?OpenDocument – 2013-03-15 13:10:37

0

首先,你不想遞歸調用初始化。你需要一個你傳遞路徑名的函數。

其次,由於DIR函數有效的有狀態方式,我認爲你必須用兩個循環來做到這一點。在第一個循環中,您處理常規文件,您將文件夾名稱放入列表中。然後在第二個循環中,查看文件夾列表,並調用傳遞給每個文件夾的遞歸函數。