|
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE hFile;
char *pszFileName;
char *cFileName;
char szFileTime1[100];
char szFileTime2[100];
char szFileTime3[100];
int i,j,k,l;
AnsiString Dir = "";
AnsiString c;
SYSTEMTIME st;
FILETIME localTime;
WIN32_FIND_DATA FileInformation;
TStringList *flist = new TStringList;
//파일 Full Path 가져오기
GetFullFilePath(flist, Edit1->Text, Edit2->Text, true );
//flist->Sort(CompareProc);
i = flist->Count;
//폴더 내의 파일 개수
//char *szSearchPath = Dir.c_str();
//i = ResearchFileNumber(szSearchPath);
for(j=0;j<i;j++)
{
if(flist->Count<1)return;
hFile = FindFirstFile((LPCTSTR)flist->Strings[j].c_str(), &FileInformation);
StringGrid1->RowCount = i+1; //RowCount 증가
memset(szFileTime1,0x00,sizeof(szFileTime1));
memset(szFileTime2,0x00,sizeof(szFileTime2));
memset(szFileTime3,0x00,sizeof(szFileTime3));
// 만든 날짜
if(FileTimeToLocalFileTime(&FileInformation.ftCreationTime,&localTime))
FileTimeToSystemTime(&localTime,&st);
sprintf(szFileTime1,"%04d-%02d-%02d %02d:%02d:%02d",st.wYear,st.wMonth,
st.wDay,st.wHour,st.wMinute,st.wSecond);
// 수정한 날짜
if(FileTimeToLocalFileTime(&FileInformation.ftLastWriteTime,&localTime))
FileTimeToSystemTime(&localTime,&st);
sprintf(szFileTime2,"%04d-%02d-%02d %02d:%02d:%02d",st.wYear,st.wMonth,
st.wDay,st.wHour,st.wMinute,st.wSecond);
// 엑세스 날짜
if(FileTimeToLocalFileTime(&FileInformation.ftLastAccessTime,&localTime))
FileTimeToSystemTime(&localTime,&st);
sprintf(szFileTime3,"%04d-%02d-%02d %02d:%02d:%02d",st.wYear,st.wMonth,
st.wDay,st.wHour,st.wMinute,st.wSecond);
// 파일명
cFileName = FileInformation.cFileName;
StringGrid1->Cells[0][j+1] = szFileTime1;
StringGrid1->Cells[1][j+1] = szFileTime2;
StringGrid1->Cells[2][j+1] = szFileTime3;
StringGrid1->Cells[3][j+1] = cFileName;
}
delete flist;
FindClose(hFile);
}
이 함수로 StringGrid에 값을 뿌렸구요..
이제 그 파일들을 StringGrid 안에서 sorting을 하려는 데요..
void __fastcall StringGridQuickSort(TStringGrid *grid, int col, int L, int R,
TStringGridSortCompare SCompare)
{
int I,J,P;
TStringList *TmpRow = new TStringList;
do
{
I=L; //start
J=R; //end
P=(L+R)>>1; //middle
do
{
P;
while(SCompare(grid,col,I,P)<0)I++; // 처음에서 중간까지
while(SCompare(grid,col,J,P)<0)I++; // 끝에서 중간까지
if(I<=J)
{
TmpRow->Assign(grid->Rows[I]);
grid->Rows[I]->Assign(grid->Rows[J]);
grid->Rows[J]->Assign(TmpRow);
if(P==I)
P=J;
else if(P==J)
P=I;
I++;
J--;
}
}
while(I<=J);
if(L<J)
StringGridQuickSort(grid, col, L, J, SCompare);
L=I;
}
while(I);
delete TmpRow;
}
이게 sorting함수인데 오름차순으로 정렬할 때
StringGridQuickSort(StringGrid1, ACom, StringGrid1->FixedRows,StringGrid1->RowCount-1,SortStringProc);
이렇게 실행을 시키면 이런 에러가 뜹니다.
Cannot convert 'int (_fastcall *)(TStringList *,int,int)' to 'int (_fastcall *)(TStringGrid *,int,int,int)'
Type mismatch in parameter 'SCompare' (wanted 'int (_fastcall *)(TStringGrid *,int,int,int)', got 'int (_fastcall *)(TStringList *,int,int)')
무엇이 잘못된건가요..
아무리 들여다 봐두 못 찾겟습니다ㅜㅜ
도와주세요..
|