Q&A

  • 각각드라이브의 로그파일이있는 폴더를 리턴해주려고합니다.

안녕하세요.

특정폴더, 디렉토리 예제는 많고 보고해봐도 영...제대로 이해가 안되는것같아서요

저는 우선

drivecombobox컴포넌트와

directorylistbox컴포넌트를 사용할 것입니다.


drivecombobox에서 c:, d:, e: 선택을하면

onchange이벤트에서

그 drive에 test라는 폴더가 있는지를 찾아보려고합니다.

제 프로그램상 test란 폴더는 d에 있습니다.


프로그램을 첫create시킬때에는 test폴더에 로그파일들을 가르키도록 제대로 설정해놨습니다.

근데 drivecombobox를 c로 옮기면(c에는 test란 폴더는 없습니다) 당연히 나오도록 되어있고,

여기서문제!

d로 하면 d에는 test란 폴더가 있으니 그밑에 로그파일들을 가르키도록 나와줘야하는데

그냥 d드라이브 기본경로만 나와줍니다..

한마디로 test란 폴더가 어떤드라이브간에 있다면 가르키게 하고싶은데요,

처음은 되는데 왜 드라이브를 선택하고나면 안되는건지..

제뜻대로 로직이 잘안됩니다..


도와주세요...

4  COMMENTS
  • Profile
    백록화 2012.05.24 07:46

    질문내용이 애매 하네요...


    드라이브를 바꾸면 test 폴더가 있을경우 해당 폴더로 이동하고 싶다는건가요?


    DriveComboBox1, DirectoryListBox1, FileListBox1 이렇게 있다고 하고..DriveComboBox1.DirList:= DirectoryListBox1, DirectoryListBox1.FileList:= FileListBox1 로 연결되어졌다면...


    DirectoryListBox1.OnChange 이벤트에 다음과 같이 코딩합니당


      with (Sender as TDirectoryListBox) do

      begin

        nIndex:= Items.IndexOf('test');

        if nIndex < 0 then

          Exit;

        Selected[nIndex]:= True;

        OpenCurrent;

      end;


    DirveComboBox 에서 드라이브가 변경이 되면 자동으로 연결된 DirList 에도 OnChage 이벤트가 호출됩니다. 그럼 DriectoryList 에는 디렉토리 목록을 가지고 있으므로 거기서 원하는 디렉토리를 찾아서 있으면 선택하고 OpenCurrent 를 호출하면 됩니다.

  • Profile
    애벌레 2012.05.24 18:53

    먼저 댓글 감사드립니다(__)

    아 제가 질문을 좀 애매하게 했네요,...

    지금 해주신 코딩은 사용자가 그 하향폴더로 클릭을 했을때 test란 폴더가 있다면 


    다시 풀어보자면, 현재 test란 폴더는 d:에 있습니다. 첫create시에는 d:의 경로에 test폴더아래

    파일들까지 보여주게되어있습니다.

    D:\

     └ aa

        └ aa'

            └aa''

               └ test

                    └test파일1

                    └test파일2

    이런식으로 보여주고있어요.


    DriveCombobox1에 c:로변경하면 저렇게 비슷한 형태의 폴더로 나열이 되겠죠.

    c에는 test라는 폴더가 없으니 그 path를 리턴해주지 못하겠지만,

    제가 다시 DriveCombobox1에서 d:로 선택하게되면 딱 저렇게 다시 보여주고 싶어서요..

    (물론 c:에도 test란 폴더가 있다면 저렇게 path타고 test폴더로 한방에 열어주고 싶습니다..)



  • Profile
    백록화 2012.05.24 22:56

    test 디렉토리가 루트에 있는게 아니고 하위에 있고 그것도 몇단계 밑에 있는지 상관없이 그렇게 하고 싶다는건가요?


    test 의 경로가 지정되어져 있다면.. 


    DriveComboBox 의 OnChange 이벤트에 요렇게 하시면...흠...


      with ( Sender as TDriveComboBox ) do

      begin

        cDir:= Drive+':\VOS\1\2\3\4\5\6\test\';

        if DirectoryExists(Drive+cDir) then

        begin

          DirList.Directory:= cDir;

          DirList.OpenCurrent;

        end;

      end;


    cDir 에 지정된 경로 넣으시고요..

  • Profile
    애벌레 2012.05.25 01:33

    다시한번 댓글 감사드립니다.

    해결은 아직 못했지만 감사드려요~^^