2013-11-14 9 views
1

선택한 폴더의 파일을 메모 박스 또는 문자열 목록에 추가하고 결과를 표시하려고합니다. 두 가지 방법으로, 나는 그들을 추가 할 수 있지만 메모 또는 폴더 목록에서 문자열 목록에서 파일을 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);'는 메모에 파일 이름을 추가합니다. 함수 호출에서 메모를 전달하는 것이 좋습니다. BTW, 귀하의'목록'범위에서 로컬이며 제대로 사용되지 않습니다. 사용하기 전에 만들어야합니다 (그리고 사용 후 해제되어야합니다). –

답변

1

이렇게 낮은 수준의 함수는 메모에 항목을 직접 추가해서는 안됩니다. 대신 기능에 TStrings (문자열 목록의 추상화)를 통과하고 그것을 채우기 :

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

을이처럼 직접 사용할 수 있습니다 TStrings 메모의 Lines 속성 타입도 있기 때문에 :

CountFilesInFolder('D:\', '*.TXT', Memo1.Lines); 
당신이 문자열 목록에서 파일 이름을 가지고 싶었다면

는 일반적인 패턴은 다음과 같이 진행됩니다

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

중요한에게 요점은 호출자가 CountFilesInFolder에 전달 된 TStringList을 생성하고 파기한다는 점입니다. 이는 Delphi에서 중요한 원칙입니다.

+0

그것은 작동합니다! 큰. 도와 줘서 고마워! – Umberto