2013-11-14 50 views
1

我想將所選文件夾中的文件添加到memobox或字符串列表中並顯示結果。在這兩種方式中,我都可以添加它們,但是我無法在備忘錄中顯示文件夾中的文件,也無法顯示ShowMessage -dialog中的字符串列表中的文件。將TSearchrec的字符串添加到備忘錄

function CountFilesInFolder(AFolder: String; AMask: String): Integer; 
var 
    tmp1: TSearchRec; 
    ergebnis: Integer; 
    memo1: string; 
    list : TStringList; 
begin 
    result := 0; 
    if (AFolder <> '') then 
    begin 
    if AFolder[length(AFolder)] <> '\' then AFolder := AFolder + '\'; 
    ergebnis := FindFirst(AFolder + AMask, faArchive + faReadOnly + faHidden + faSysFile, tmp1); 
     while ergebnis = 0 do 
     begin 
     Inc(result); 
     ergebnis := FindNext(tmp1); 
     while ((tmp1.Name = '|*_tif.tif')) and (ergebnis <> 0) do 
     ergebnis := FindNext(tmp1); 
     end; 
     list.Add(tmp1.Name); 
     FindClose(tmp1); 
    end; 
end; 

謝謝你的時間和對我的英語不好。

+1

'Memo1.Lines.Add(tmp1.Name);'將文件名添加到您的備忘錄中。儘可能在函數調用中傳遞備忘錄。順便說一句,你的'列表'在本地範圍內,並沒有正確使用。它必須在使用前創建(並在使用後釋放)。 –

回答

1

像這樣的底層函數不應直接將項目添加到備忘錄。而是通過一個TStrings(一個字符串列表的抽象化)到功能並填寫:

function CountFilesInFolder(AFolder: String; AMask: String; FileNames: TStrings): Integer; 
begin 
// do your file enumeration 
// for each file call FileNames.Add(FileName); 
end; 

由於備忘錄的Lines屬性的類型也TStrings你可以直接使用它像這樣:

CountFilesInFolder('D:\', '*.TXT', Memo1.Lines); 

如果你想有一個字符串列表中的文件名,通常的模式是這樣的:

FileNames := TStringList.Create; 
try 
    CountFilesInFolder('D:\', '*.TXT', FileNames); 
finally 
    FileNames.Free; 
end; 

重要要點是調用者創建和銷燬傳入CountFilesInFolderTStringList - Delphi中的一個重要原則。

+0

它的工作原理!大。感謝您的幫助! – Umberto