C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[47897] 파일 검색기를 만들었는데 확장자 까지 안 넣으면.......
홍길동 [] 1603 읽음    2007-01-25 21:12
제가 파일 검색하는걸 만들었는데요 확장를 안 넣어 주면 파일 검색이 안됩니다
확장자까지 넣으면 다 돼는데요...
그리구 파일 아이콘이 안나 오는 이유를 모르겠네요..제대로 해준거 같은데...ㅜㅜ
고수님들 도와 주세요~소스를 다 올립니다

TDateTime ConvertDateTime(FILETIME ft)
{
    FILETIME ftLocal;
    SYSTEMTIME st;
    ::FileTimeToLocalFileTime(&ft, &ftLocal);
    ::FileTimeToSystemTime(&ftLocal, &st);
    TDateTime dt(st.wYear, st.wMonth, st.wDay);
    TDateTime tm(st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);

    return dt + tm;
}
//---------------------------------------------------------------------------
void TfrmMain::SearchFiles(const String &Directory)
{
    WIN32_FIND_DATA filedata; //파일 데이터를 선언한다
    HANDLE filehandle;//파일에 대한 핸들을 얻기 위해 선언한다.
    filehandle = FindFirstFile((Directory + edtKeyword->Text).c_str(),&filedata); //현재 디렉토리에 파일 이름 모두 찾는다

    if (filehandle != INVALID_HANDLE_VALUE) //핸들이 잘못되었다면
    {
        TSHFileInfo aSHFi;
        do
        {
            TListItem *ListItem = ListView1->Items->Add();
            String s = Directory + filedata.cFileName;
            int pos = s.LastDelimiter("\\");
            s.Delete(1,pos);
            ListItem->Caption = s;
            //디렉토리를 리스트 뷰에 출력한다.
            SHGetFileInfo(s.c_str(), 0, &aSHFi, sizeof(aSHFi),
                    SHGFI_ATTRIBUTES
                | SHGFI_DISPLAYNAME
                | SHGFI_SYSICONINDEX
                | SHGFI_TYPENAME
                | SHGFI_SMALLICON
                );
            ListItem->ImageIndex = aSHFi.iIcon;
            ListItem->SubItems->Add(Directory);

            if (filedata.nFileSizeHigh == 0)
            {
                //파일의 크기를 출력한다.
                ListItem->SubItems->Add(String((int)((filedata.nFileSizeLow + 1023)/1024)) + " K");
            }
            else
            {
                double filesize = (MAXWORD * filedata.nFileSizeHigh) + filedata.nFileSizeLow;
                ListItem->SubItems->Add(String(filesize/1024.0) + " K");
            }
            ListItem->SubItems->Add(ConvertDateTime(filedata.ftLastAccessTime));
            Application->ProcessMessages();//현재 작업이 진행중임을 원도우에 알려준다.
        }
        while (FindNextFile(filehandle, &filedata));
        {
            FindClose(filehandle);
        }
    }
    String dir = Directory + "*.*";
    filehandle = FindFirstFile((Directory + "*.*").c_str(), &filedata); //서브 디렉토리에 나오는 파일들은 모두 찾는다.

    if (filehandle != INVALID_HANDLE_VALUE)
    {
        do
        {
            if ((filedata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0
                    && String (filedata.cFileName) != "."
                    && String (filedata.cFileName) != "..")
            {
                SearchFiles(Directory + filedata.cFileName + "\\");
            }
        }
        while(FindNextFile (filehandle, &filedata));
        {
            FindClose(filehandle);
        }
    }

    Application->ProcessMessages();//메시지 처리를 위해 애플리케이션으로 보낸다.
    return;
}
//--------------------------------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
    TSHFileInfo aSHFi;
    TImageList *ilSmall = new TImageList(this);
    ilSmall->ShareImages = true;
    ilSmall->Handle = SHGetFileInfo("*.*",0, &aSHFi, sizeof(aSHFi),
        SHGFI_ATTRIBUTES        //파일 속성 플래쉬
        | SHGFI_DISPLAYNAME     // 파일 이름 디스플레이
        | SHGFI_SYSICONINDEX    // 아이콘 핸들
        | SHGFI_SMALLICON);     // 작은 아이콘
    ListView1->SmallImages = ilSmall;
    TImageList *ilLarge = new TImageList(this);
    ilLarge->ShareImages = true;
    ilLarge->Handle = SHGetFileInfo("*.*", 0, &aSHFi, sizeof(aSHFi),
            SHGFI_ATTRIBUTES
        | SHGFI_DISPLAYNAME
        | SHGFI_SYSICONINDEX
        | SHGFI_LARGEICON
    );
    ListView1->LargeImages = ilLarge;   
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::ListView1DblClick(TObject *Sender)
{
    TListItem *aLi;
    aLi = ListView1->Selected;

    //현재 선택된 아이템이 NULL이 아닐 경우
    if (aLi != NULL)
    {
        //프로그램을 실행시킨다
        String S = aLi->SubItems[0].Strings[0] + aLi->Caption;
        ShellExecute(Handle, "open", S.c_str(), NULL, NULL, SW_SHOW);
    };
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btSearchClick(TObject *Sender)
{
    btSearch->Enabled = false;
    Cursor = crHourGlass;
    ListView1->Items->Clear();
    String Directory = "C:\\";

    if (Directory [Directory.Length()-1] != '\\')
    {
        Directory = Directory + "\\";
        SearchFiles(Directory);
        btSearch->Enabled = true;
        Cursor = crDefault;
    }
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
47897 파일 검색기를 만들었는데 확장자 까지 안 넣으면....... 홍길동 1603 2007/01/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.