Q&A

  • 특정 디렉토리와 그 하위디렉토리안의 모든 파일확장자만 알아올수 있나요?
특정디렉토리와 그 하위디렉토리 안에있는 모든 확장자만 읽어올려고 하는데
어덯게해야할지 전혀 감이 잡히지를 않는군요.

고수님들의 답변을 부탁드립니다.

3  COMMENTS
  • Profile
    홍성락 2002.09.01 12:04
    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;
  • Profile
    박희경 2002.09.01 21:48
    신곳한 답변에 감사드립니다.
    제가지금 들뜬마음으로 해보니 해당폴더의 확장자만읽어오고 하위디렉토리에있는 확장자는 읽어오지 못하더군요.

    제가 델초보다 보니 재귀호출을 해야할것같은데 도저히 어덯게해야할지...

    번거로우시더라도 다시한번 답변주시면 고맙겠습니다.
    부탁드립니다.

  • Profile
    홍성락 2002.09.02 19:17
    테스트를 해보았어야 했는데....
    예제이므로 원하는 방향으로 잘 다듬어보세요.
    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:');  //

    end;