2013-11-14 9 views
1

Я хочу добавить файлы в выбранную папку в memobox или в строковый список и показать результаты. В обоих случаях я могу добавить их, но я не могу показать файлы из папки в памятке или из списка строк в ShowMessage -dialog.Добавить String из TSearchrec в Memo

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);' добавляет имена файлов в вашу заметку. Лучше передать памятку в вызове функции. BTW, ваш 'list' является локальным по объему и не используется должным образом. Он должен быть создан перед использованием (и освобожден после использования). –

ответ

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; 

важно Дело в том, что вызывающий создает и уничтожает TStringList, переданный в CountFilesInFolder - важный принцип в Delphi.

+0

Он работает! Отлично. Спасибо за помощь! – Umberto