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
[57983] Re:파일을 생성한 순서대로 정렬하려면?
14 [] 2635 읽음    2009-08-09 17:06
까망이 님이 쓰신 글 :
: 안녕하세요 초보프로그래머입니다.
: 제가 하려고 하는건 생성된지 오래된 파일부터 하나씩 지워 나가는 건데요
: 파일 지우고 하는건 알겠는데 오래된걸 찾는게 힘드네요.
: 하나씩 비교해서 하려니까 너무 오래 걸리는거 같고..ㅠㅠ
: 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);
//차후 어디선가 메모리 해제 요망


기타 방법들도 있지만 생략.

+ -

관련 글 리스트
57979 파일을 생성한 순서대로 정렬하려면? 까망이 941 2009/08/09
57983     Re:파일을 생성한 순서대로 정렬하려면? 14 2635 2009/08/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.