|
제가 파일 검색하는걸 만들었는데요 확장를 안 넣어 주면 파일 검색이 안됩니다
확장자까지 넣으면 다 돼는데요...
그리구 파일 아이콘이 안나 오는 이유를 모르겠네요..제대로 해준거 같은데...ㅜㅜ
고수님들 도와 주세요~소스를 다 올립니다
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;
}
}
//---------------------------------------------------------------------------
|