|
까망이 님이 쓰신 글 :
: 안녕하세요 초보프로그래머입니다.
: 제가 하려고 하는건 생성된지 오래된 파일부터 하나씩 지워 나가는 건데요
: 파일 지우고 하는건 알겠는데 오래된걸 찾는게 힘드네요.
: 하나씩 비교해서 하려니까 너무 오래 걸리는거 같고..ㅠㅠ
: FilelistBox를 쓰려고 해도 어떻게 정렬하는건지 잘 모르겠네요..ㅠㅠ
:
: 간단한 어드바이스라도 부탁드립니다.ㅠㅠ
: 이걸로 몇일째 고민하고 있어요..흑흑..
struct TFileInfo
{
AnsiString Name;
FILETIME CreationTime;
bool operator < (const TFileInfo& other) const
{
return (CompareFileTime(&CreationTime, &other.CreationTime)<0);
}
};
방법 1.
#include <algorithm>
template <class RandomAccessIterator>
void sort (RandomAccessIterator first,
RandomAccessIterator last);
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first,
RandomAccessIterator last, Compare comp);
#include <vector>
#include <algorithm>
using namespace std;
vector<TFileInfo> FileInfoes;
TFileInfo fileinfo;
fileinfo.Name = "???"; // from WIN32_FIND_DATA::cFileName or
fileinfo.CreationTime = FILETIME(); //from GetFileTime(...) or WIN32_FIND_DATA::ftCreationTime
FileInfoes.push_back(fileinfo);
.
.
.
sort(FileInfoes.begin(),FileInfoes.end());
방법 2.
void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));
#include<stdlib.h>
int _USERENTRY QuickSortCompare(const void *obj1, const void *obj2)
{
return CompareFileTime(&(*(TFileInfo**)obj1)->CreationTime,&(*(TFileInfo**)obj2)->CreationTime);
}
TFileInfo *FileInfoes;
int FileCount = 256;
FileInfoes = new TFileInfo[FileCount];
FileInfoes[0] = new TFileInfo;
FileInfoes[0]->Name = "???"; // from WIN32_FIND_DATA::cFileName or
FileInfoes[0]->CreationTime = FILETIME(); //GetFileTime(...) or WIN32_FIND_DATA::ftCreationTime
.
.
.
FileInfoes[FileCount-1] = new TFileInfo;
FileInfoes[FileCount-1]->Name = "???"; // from WIN32_FIND_DATA::cFileName or
FileInfoes[FileCount-1]->CreationTime = FILETIME(); //GetFileTime(...) or WIN32_FIND_DATA::ftCreationTime
qsort(FileInfoes,FileCount,sizeof(TFileInfo*),QuickSortCompare);
//차후 어디선가 메모리 해제 요망
기타 방법들도 있지만 생략.
|