|
아래는 제가 작성한 소스입니다.
이 소스는 제가 Q&A게시판에 있는 여러가지를 아주많이 참고 했습니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "DFDmain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TDFDForm *DFDForm;
TStringList *FileList;
//---------------------------------------------------------------------------
__fastcall TDFDForm::TDFDForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TDFDForm::FormCreate(TObject *Sender)
{
FileList = new TStringList;
if(FileList == NULL) return;
DFDListUpDate("c:\\*.*"); //파일 리스트 업데이트 함수
}
//---------------------------------------------------------------------------
void __fastcall TDFDForm::DFDListUpDate(AnsiString DirPath)
{
TSearchRec SR; //파일 이름,속성,날짜등등의 구조체
int done;
TListItem* NItem;
FileList->Clear(); // TStringList아이템 삭제
DFDListView->Items->Clear(); //리스트 뷰에 표시되어 있는 목록을 삭제
done = FindFirst(DirPath, faAnyFile, SR);
while(!done)
{
FileList->Add(SR.Name); //FileList에 파일 이름 추가
done = FindNext(SR);
}
FileList->Sort(); //이름순 정렬
for(int i = 0; i < FileList->Count; i++)
{
NItem = DFDListView->Items->Add(); //새로운 목록을 추가한다.
NItem->Caption = FileList->Strings[i]; //목록의 이름 지정
NItem->ImageIndex = 1;
}
}
//---------------------------------------------------------------------------
void __fastcall TDFDForm::FormDestroy(TObject *Sender)
{
delete FileList;
}
//---------------------------------------------------------------------------
위의 소스 처럼 하면 폴더와 파일이 다 같이 이름순으로 출력 됩니다. 그런데 제가 출력 하고 싶은건 폴더는 폴더데로 파일은 파일데로 이름순 정렬을 해서 출력 하고 싶습니다. 그래서 제가 생각한 방법으로는 우선 폴더만 FileList에 넣어서 이름순 정렬을 하고 ListView에 넣고 다시 파일만 FileList에 넣어서 이름순 정렬을 해서 ListView에 넣으면 제가 출력하고 싶은 방법데로 될줄알았는데 FindFirst 함수를 FindFirst(DirPath, faDirectory, SR); 이렇게 바꾸어도 파일과 폴더가 같이 검색됩니다. 그래서
done = FindFirst(DirPath, faDirectory, SR);
while(!done)
{
if(SR.Attr == faDirectory)
FileList->Add(SR.Name); //FileList에 파일 이름 추가
done = FindNext(SR);
}
이렇게도 해봤지만 C 디렉토리의 Program file디렉토리는 추가되지 않습니다.(아마 Program file디렉토리의 Attr이 faHidden으로 되나봐요)
폴더만 검색할려면 어떻게 해야 합니까? 아님 도스용 Mdir처럼 폴더는 폴더데로 파일은 파일데로 출력하는 다른 방법이 있는지 알려주세요 ㅡ.ㅡ
^^;;
그리고 또한가지 더 질문 할께요 파일의 확장자 데로 아이콘이 자동적으로 바꿀려면 제가 ImageList에 모든 아이콘을 다집어넣어서 확장자를 검색해서 넣어야 됩니까? 아니면 윈도우의 레지스트리나 다른 무언가를(아직 초보라서 ㅡ.ㅡ)읽어와서 하는 다른 방법이 있는지 쫌 알려 주세요
|