Q&A

  • [질문]디렉토리 폴더에 대한 질문입니다. 고수님 답변 부탁드립니다.

선택된 디렉토리 밑에 서브디렉토리가 있는지
서브디렉토리가 있다면 몇개 있고 디렉토리명이 먼지하구요
서브디렉토리에 그 아래 서브디렉토리가 있다면 몇개이면 폴더명이 어떻게 되는지

휴 힘드네요~ 뷰로 해보고 셀트리뷰도 해봐도 안되네요~ 고수님 플리즈

7  COMMENTS
  • Profile
    파랑망토 2011.01.05 02:23
    대략 이런식으로 하면 디렉토리 스트를 불러옵니다.

    조금 응용하면 하위폴더의 하위 폴더 리스트도 가져오는건 문제가 안되겠네요.

    procedure TForm1.Button2Click(Sender: TObject);
    var
      sr: TSearchRec;
      FileAttrs , nResult : Integer;
      sPath : String;
    begin

      FileAttrs :=  faDirectory;

      with Listbox1 do
      begin
        items.Clear;
        sPath := ExtractFilePath(ParamStr(0));
        sPath := sPath + '*.*';

        nResult := FindFirst( sPath , faDirectory , sr);
        if nResult = 0 then
        begin
          repeat
            if faDirectory = sr.Attr then
            begin
            items.Add(sr.Name );
            end;
          until FindNext(sr) <> 0;
          FindClose(sr);
        end;
      end;

    end;
  • Profile
    구창민 2011.01.05 05:27

    아래 코드는 디렉토리를 검색하여 파일을 찾는 예제입니다.


    원하시는 내용이 아래 코드에 모두 들어있습니다. 


    unit Unit1;


    interface


    uses

     Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

     StdCtrls;


    type

     TForm1 = class(TForm)

       Label1: TLabel;

       Button1: TButton;

       procedure Button1Click(Sender: TObject);

     private

       { Private declarations }

     public

       { Public declarations }

       procedure ListFiles(D,Name,SearchName : String);

     end;


    var

     Form1: TForm1;


    implementation

    {$R *.DFM}


    procedure TForm1.ListFiles(D, Name, SearchName: String);

    var

     SR: TSearchRec;

    begin

     if D[Length(D)] <> '\' then

       D := D + '\';


     if FindFirst(D+Name, faAnyFile, SR) = 0 then

       repeat

         if (SR.Attr <> faDirectory) and (SR.Name[1] <> '.') then

           if AnsiUpperCase(SR.Name) = AnsiUpperCase(SearchName) then

             Label1.Caption := D+SR.Name; {파일을 찾으면 label1.Caption에 디렉토리를 표시}

       Until (FindNext(SR)<>0);

     FindClose(SR);


     if FindFirst(D+'*.*', faDirectory, SR) = 0 then

     begin

       repeat

         if ((Sr.Attr and faDirectory) = faDirectory) and

            (SR.Name[1]<>'.')

         then

           ListFiles(D+SR.Name+'\', Name, SearchName); // 재귀적 호출을 한다

       until (FindNext(SR) <> 0);

     end;

     FindClose(SR);

    end;


    procedure TForm1.Button1Click(Sender: TObject);

    begin

     // c:\ 부터 하위 디렉토리에서 delphi32.exe 파일을 찾는다

     ListFiles('c:\','*.*','delphi32.exe');

    end;


    end.

     

  • Profile
    델파이최고 2011.01.06 19:22

    구창민님 로직과 비슷하게는 구현해봤는뎅~ 해결이 안되더군요 ㅠ.ㅠ;;;

    파랑망토님 로직을 써보니~ 역시나 구창민님 로직하고 비슷한 결과과 나오더라구요~

    얼빗 본것도 같은뎅~ 그 부분을 못 찾아서 이렇게 궁상을 떠네요 ㅋㅋㅋ

    답변 주셔서 감사합니다.

  • Profile
    곽효근 2011.01.06 22:22

    창민님께서 올린 소스중에 재귀적 호출을 한다 부분이 핵심입니다.


    하위 폴더 탐색할때 주로쓰는 방식인데 재귀호출을 먼저 이해하시면 


    소스 이해가 빠르실듯 하네요~


  • Profile
    델파이최고 2011.01.06 23:58

    백록화님 감사합니당..

     

  • Profile
    백록화 2011.01.07 00:02

    문법강조가 잘 안돼서 삽질 하고 있는데...그 새 보신 모양이군요 ㅋ 

  • Profile
    백록화 2011.01.07 00:07
    function GetDirName(AList: TStrings; ABaseDirName: String): Integer;
      var
        pSR: TSearchRec;
        nResult: Integer;
        vSubDirList: TStrings;
    begin
      if FindFirst(ABaseDirName+'\*.*', faDirectory, pSR) = 0 then
      begin
        vSubDirList:= TStringList.Create;
        repeat
          if (faDirectory = pSR.Attr) and (pSR.Name[1] <> '.') then
          begin
            nResult:= GetDirName(vSubDirList, ABaseDirName+'\'+pSR.Name);
            if nResult = 0 then
              vSubDirList.Add(ABaseDirName+'\'+pSR.Name);
          end;
        until FindNext(pSR) <> 0;

        FindClose(pSR);

        Result:= vSubDirList.Count;
        if Result > 0 then
          AList.AddStrings(vSubDirList);

        vSubDirList.Free;
       end;
    end;
     
    // 에이..문법강조 기능 포기 -.-;;; 왜 이상하게 적용이 되는거징...귀찮넹..
    // 이미 다른분들이 답은 알려주셨으니...위 코드에 대한 별도설명은 없음 
    • 파랑망토
      2011.01.05 02:23
      대략 이런식으로 하면 디렉토리 스트를 불러옵니다.조금 응용하면 하위폴더의 하위 폴더 리스트도 가져오는...
    • 구창민
      2011.01.05 05:27
      아래 코드는 디렉토리를 검색하여 파일을 찾는 예제입니다.원하시는 내용이 아래 코드에 모두 들어있습니다...
    • 델파이최고
      2011.01.06 19:22
      구창민님 로직과 비슷하게는 구현해봤는뎅~ 해결이 안되더군요 ㅠ.ㅠ;;; 파랑망토님 로직을 써보니~ 역시나...
    • 곽효근
      2011.01.06 22:22
      창민님께서 올린 소스중에 재귀적 호출을 한다 부분이 핵심입니다.하위 폴더 탐색할때 주로쓰는 방식인데 ...
    • 델파이최고
      2011.01.06 23:58
      백록화님 감사합니당..  
    • 백록화
      2011.01.07 00:02
      문법강조가 잘 안돼서 삽질 하고 있는데...그 새 보신 모양이군요 ㅋ 
    • 백록화
      2011.01.07 00:07
      function GetDirName(AList: TStrings; ABaseDirName: String): Integer;  var    pSR...
    • 이정욱
      2011.01.05 06:37
      보통은 USB를 직접 제어하는것이 아닙니다. 전통적인 델파이 방식으로 인쇄 하시면 됩니다.Uese 절에 ...
    • 파랑망토
      2011.01.05 18:25
      관심 갖아주셔서 감사합니다~ 기존에 시리얼포트나 패러럴 포트의 경우에는 직접제어를 했어서 ...
    • 이정욱
      2011.01.06 22:50
      아... USB를 직접 제어 하시려나 보군요.. 그러려면.. 각 프린터마다 다르게 되어있는 프로토콜들 때문에 ...
    • 파랑망토
      2011.01.07 22:27
      답변해주셔서 감사합니다.HID는 입력에 관련된 DEVICE 더군요.. 마우스 , 키보드 , 조이스특 등등..일단 프...
    • 백록화
      2011.01.04 02:43
      DbGrid류에는 RowCount가 없어요..(확장 DbGrid에도 있는게 드물껍니다.) 전체 행수를 알고 싶다는 연결된 ...
    • 스카페이스
      2011.01.04 02:55
      생초보입니다. TStringGrid로 타입캐스팅은 어떻게 해야 하나요?
    • 백록화
      2011.01.04 02:58
      TStringGrid(CRDbGrid1).RowCount; 
    • 스카페이스
      2011.01.04 03:09
      잘 읽어 오네요. 백록화님 이 고마움을 어떻게...
    • 백록화
      2011.01.03 20:11
      D7 에서는 DateUtils.pas 에 보시면 WeekOf 함수가 있습니다. 
    • 치꼬
      2010.12.31 22:13
      view > OptionsSelection > CellSelect 속성값을 True 로 하면 됩니다. 
    • 호리미
      2011.01.04 02:49
      보통 폼에 퀀텀그리드를 올려놓으면 기본적으로 OptionsSelection 속성값에 CellSelect가 True입니다. 현재...
    • 치꼬
      2011.01.04 04:09
      음..이상하군요. 혹시.. 디자인이 아닌 실행시 뭔가 설정이 되는건 아닐까요?
    • 델파이
      2010.12.30 14:41
      중국어를 입력하실 때 아래의 함수를 이용해보세요.   function URLEncode(const S: AnsiString): A...
    • 대리피스
      2010.12.31 02:57
      중국어는 웹에서 입력하고 그 입력값을 wideString 으로 받아오는 형식인데.. 그럼.. 위의 URLEncode 함수...
    • 이정욱
      2010.12.31 05:39
      받아오실때도 ansistring으로 받아오셔야 합니다. 단 UrlEncoding을 하신 후 받아오셔야겠죠.
    • 이정욱
      2010.12.29 08:50
      파일명 대신 폴더명을 주시면 되실텐데요? 파일이나 폴더나 다루는것은 같습니다.
    • 델파이최고
      2010.12.29 19:04
      ㅎㅎ 못가져오던데요 ㅋㅋㅋ 다시 한번 머리 쌈매봐야 겠네요  
    • 백록화
      2010.12.29 20:24
      정욱님 말씀대로 파일이나 디렉토리나 같이 다루는데..파일도 그렇지만 디렉토리명을 바꾸는것은 마지막수...
    • 델파이최고
      2010.12.30 20:13
      아 그럼~ 폴더 생성일자를 알아내면 되겠네요 ^^
    • 구창민
      2010.12.30 08:34
      백록님 열렙 하시네요.. 파티좀..
    • 이정욱
      2010.12.28 00:50
      AddressItem := AMsg.BccList.Add; AddressItem.Address := 'midmee@midmee.com'; <-수신확인?AddressIt...
    • 이정욱
      2010.12.28 04:46
      아래의 파일은 첨부파일을 어떻게 다루는지 나온 소스 입니다.   procedure TMailerForm.btnSendMai...
    • 델파이최고
      2010.12.28 06:54
      if FileExists(FileListBox1.Items.strings[0]) then      TIdAttachmentFile.C...
    • 이정욱
      2010.12.28 14:10
      {$APPTYPE CONSOLE}uses SysUtils, IdSMTP, IdAttachment, IdMessage, IdMessageParts, IdEMailAddres...
    • 델파이최고
      2010.12.28 23:40
      ㅎㅎ 소스를 보고 코딩해서~ 보내봐도~ 역시나 This is a multi-part message in MIME format --L1lHvf=_p...
    • 델파이최고
      2010.12.29 01:48
      감사합니당 ^^
    • 순수시대
      2011.03.05 02:58
      혹시 메일 View(다음메일...)가 혹시 아웃룩인가요 ??? (죄송 궁금해서요)
    • 이정욱
      2010.12.28 00:09
      질문 내용만 보고는 뭐라고 말씀드리기가 어렵습니다...ㅡㅡ;;;   그 부분의 소스를 보여주셔야 문제...
    • 이정욱
      2010.12.27 01:34
      인디는 무료입니다... 오픈소스 프로젝트 입니다.......제가 드린 링크에 가시면 문서자료도 많습니다. 한...
    • 델파이최고
      2010.12.27 17:57
      이것 저것 다 해 보아도~ 통~~ 답이 안나와서요~ ㅎㅎㅎ 이번에는 답 나와야 하는뎅 ㅋㅋ
    • 이정욱
      2010.12.26 23:18
      http://www.delphi.co.kr/?mid=downloads&search_target=title&search_keyword=smtp&document_...
    • 이정욱
      2010.12.26 23:22
      또한 말씀하신데로 검색을 해보니.. http://www.ararat.cz/synapse/doku.php/public:howto:smtpsend ...
    • 델파이최고
      2010.12.26 23:32
      첨부파일 참조 부탁드립니다. 에러가 나는 부분은 컴포넌트 버젼이 틀리다고 나오는뎅 ㅋㅋ 델7에서 인디1...
    • 이정욱
      2010.12.26 23:47
      인디 설치가 제데로 안된것 입니다.. 과거의 인디를 지우시고, Search Path에서도 지워주셔야 합니다. ...
    • 델파이최고
      2010.12.27 00:14
      아무리 지우고 다실 깔아도 똑같네요~ ㅠ.ㅠ; 인스톨팩케지로만 파일을 가지고 있어서요~ 소스로 컴파일은 ...
    • 이정욱
      2010.12.27 00:22
      http://www.indyproject.org/Sockets/Docs/index.EN.aspx 가시면 있습니다..
    • 델파이최고
      2010.12.27 01:02
      ㅎㅎ 가보니~ 유료내요 ㅋㅋ ㅠ.ㅠ;  
    • • • •
    • 이정욱
      2010.12.26 20:58
      Uses 절에 IdEMailAddress 를 추가해주셔야 합니다...
    • 델파이최고
      2010.12.26 21:12
      매번감사합니다. 하지만 아직도 useTLS 속성을 못 찾았습니다. ㅠ.ㅠ
    • 이정욱
      2010.12.26 22:10
      제 생각에는 아직 인디가 과거 버전이 동작하고 있지 않나..라고 예상이 됩니다. 과거 버전의 인디를 삭제 ...
    • 델파이최고
      2010.12.26 22:13
      과거 인디 삭제 되었습니다. 왜냐면~ 아이콘이 처음과 이번꺼라 바뀌었거덩요ㅋㅋㅋ 팩케지 에서 삭제하고 ...
    • 델파이최고
      2010.12.26 22:18
      혹시 몰라서 그러는뎅 인디 파일 이것 맞나요
    • 이정욱
      2010.12.25 22:05
      var  AMsg : TidMessage;  AddressItem : TidEmailAddressItem;begin  AMsg...
    • 델파이최고
      2010.12.26 02:31
      감사합니다. 궁금한점 있으면 다시 한번 조언 부탁 드릴께요 ^^
    • 델파이최고
      2010.12.26 02:34
      이상하네요~~ idsmtp 컴포넌트에 UseTLS속성이 없는뎅! 어디에 있는지요?
    • 델파이최고
      2010.12.26 02:41
      제가 아직 미흡 하여 AddressItem : TidEmailAddressItem; 안된다는뎅 ㅠ.ㅠ;  
    • 델파이최고
      2010.12.26 02:46
      AMsg.Body.LoadFromFile(ExtractFilePath(Application.ExeName)+'\RegMail.txt'); 본문을 텍스트로 뿌려주...
    • 이정욱
      2010.12.26 08:26
      인디 최신 버전을 사용해보세요...
    • 델파이최고
      2010.12.26 17:32
      인디 최신은 델파이에서 받을수 있나요? 제가 쓰고 있는것 델7 인데요
    • 이정욱
      2010.12.25 22:07
      1번의 질문은 조금 더 자세한 내용이 필요 합니다.혹시 Drag and Drop 기능을 말씀하신것이라면 TreeView D...
    • 임정현
    • 2010.12.22 01:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 동그랑땡
      2010.12.26 07:57
      퀵리포트에 OnNeedData 이벤트가 있고, 거리에는 MoreData 라는 변수가 있어서 그걸로 사용할 수 있습니다...
    • 정경철
    • 2010.12.21 02:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2010.12.25 22:08
      델파이에 내장된 TeeChart 가 현재 델파이에서는 가장 많이 쓰이고 있습니다.기능이 많은것은 TeeChart Pro...
    • 이정욱
      2010.12.25 22:11
      델파이 2010에서 XE로의 업그레이드는 많은 분들께서 그냥 그렇다고 하십니다.하지만 델파이 7에서 XE로의 ...
    • 아르스
      2010.12.19 22:38
      쿼리를 쓸때 알리아스를 지정해 주셔야 할듯 합니다. Select Sum(Field_Childrncount) as cnt From ta...
    • 이민상
      2010.12.20 02:55
      아르스님 감사
    • 이민상
      2010.12.20 02:58
      혹 FieldByName()이 아닌 ParamByName()은 쿼리에서 변수선언을 아떻게 해야 하나요?
    • 아르스
      2010.12.20 21:13
      FiledByName이랑 ParamByName이랑은 쓰임새가 다릅니다. FieldByName은 일반적으로 해당 테이블의 해...
    • 최용일
      2010.12.18 08:30
      TTimer에 메모리릭이 있었나요? 들어본적이 없는것 같은데요... ThreadTimer에 Enabled필드를 만들고 ...
    • suffering tears
      2010.12.18 08:39
      저도 최용일님말씀처럼 코딩해봤지만, TThreadTimer의 OnTimer에 루프명령을 코딩하고 해봤지만, 잘 안되...