hsr///////////////////////////////////////////////
많이 테스트는 안했는데요...
응용해보세요.
(확장자 대소문자 안걸렀음/하위 폴더는 재귀호출/확장자 찾을땐 맨 마지막 점을 찾음,
도스 디렉톨리 . 와 ..는 기냥 간단히 스트링으로 처리하여 찾음...)
procedure TForm1.Button3Click(Sender: TObject);
begin
ListBox1.Clear;
FileExtSearch('C:Temp'); //
end;
procedure TForm1.FileExtSearch(DirectoryList:string);
var
SearchRec: TSearchRec;
i : integer;
P_Name, N_Name : string;
begin
if FindFirst(DirectoryList + '*.*', faAnyFile , SearchRec) = 0 then begin
repeat
if (SearchRec.Attr and FaVolumeId <> FaVolumeID) then begin
if (SearchRec.Attr and FaDirectory = FaDirectory) then begin
if (SearchRec.Name <> '.')and(SearchRec.Name <> '..') then
FileExtSearch(SearchRec.Name);
end
else begin
P_Name := SearchRec.Name;
while Pos('.',P_Name)>0 do begin
P_Name := copy(P_Name, Pos('.',P_Name)+1, Length(P_Name));
end;
//확장자 대소문자 안걸렀음 ,그냥 같지 않으면 리스트 박스에 넣음
if (P_Name<>'')and(ListBox1.Items.IndexOf(P_Name)<0) then
ListBox1.Items.Add(P_Name);
end;
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
테스트를 해보았어야 했는데....
예제이므로 원하는 방향으로 잘 다듬어보세요.
SearchRec.Name은 디렉토리 빼고 파일명만 가져오므로
FileExtSearch(SearchRec.Name);을
FileExtSearch(DirectoryList + '' + SearchRec.Name);
procedure TForm1.FileExtSearch(DirectoryList:string);
var
SearchRec: TSearchRec;
i : integer;
P_Name, N_Name : string;
begin
if FindFirst(DirectoryList + '*.*', faAnyFile , SearchRec) = 0 then begin
repeat
if (SearchRec.Attr and FaVolumeId <> FaVolumeID) then begin
if (SearchRec.Attr and FaDirectory = FaDirectory) then begin
if (SearchRec.Name <> '.')and(SearchRec.Name <> '..') then
FileExtSearch(DirectoryList + '' + SearchRec.Name);
end
else begin
P_Name := SearchRec.Name;
if Pos('.',P_Name)>0 then begin
while Pos('.',P_Name)>0 do begin
P_Name := copy(P_Name, Pos('.',P_Name)+1, Length(P_Name));
end;
//확장자 대소문자 안걸렀음 ,그냥 같지 않으면 리스트 박스에 넣음
if (P_Name<>'')and(ListBox1.Items.IndexOf(P_Name)<0) then
ListBox1.Items.Add(P_Name);
end;
end;
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Clear;
FileExtSearch('D:'); //
많이 테스트는 안했는데요...
응용해보세요.
(확장자 대소문자 안걸렀음/하위 폴더는 재귀호출/확장자 찾을땐 맨 마지막 점을 찾음,
도스 디렉톨리 . 와 ..는 기냥 간단히 스트링으로 처리하여 찾음...)
procedure TForm1.Button3Click(Sender: TObject);
begin
ListBox1.Clear;
FileExtSearch('C:Temp'); //
end;
procedure TForm1.FileExtSearch(DirectoryList:string);
var
SearchRec: TSearchRec;
i : integer;
P_Name, N_Name : string;
begin
if FindFirst(DirectoryList + '*.*', faAnyFile , SearchRec) = 0 then begin
repeat
if (SearchRec.Attr and FaVolumeId <> FaVolumeID) then begin
if (SearchRec.Attr and FaDirectory = FaDirectory) then begin
if (SearchRec.Name <> '.')and(SearchRec.Name <> '..') then
FileExtSearch(SearchRec.Name);
end
else begin
P_Name := SearchRec.Name;
while Pos('.',P_Name)>0 do begin
P_Name := copy(P_Name, Pos('.',P_Name)+1, Length(P_Name));
end;
//확장자 대소문자 안걸렀음 ,그냥 같지 않으면 리스트 박스에 넣음
if (P_Name<>'')and(ListBox1.Items.IndexOf(P_Name)<0) then
ListBox1.Items.Add(P_Name);
end;
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;