* 파일 / 폴더 존재 여부 파악하기
어떻게 확인하면 가장 빠르게 파일/폴더 여부를 확인할 수 있을까?
1) 가능한 파일을 안 열어보고 알 수 있어야 하고,
2) 경로는 전체 경로를 알고 있어서 곧바로 접근 가능하며,
3) 불필요한 index 파일 없이 빠르게 접근하는 방법을 고민 중이다.
일단 원하는 파일의 이름은 언제든 전체 경로를 만들어낼 수 있다는 가정하에
가장 빠르게 해당 파일이 존재하는지 여부를 알 수 있다면,
FindFile 등을 이용한 불필요한 디렉토리 검색을 사용하지 않아도 되고,
불필요하게 폴더 구조를 저장할 정보 파일을 만들 필요 없을 터이니
이를 해결하고자 이래저래 방법을 찾아 테스트를 해 본다.
// 1) CreateFile 사용
- 86,400 개 파일 검사 (8,640개 파일 존재) - 578 ms
- 2,592,000 개 파일 검사 (0개 파일 존재) - 2,484 ms
참고) dwDesiredAccess=GENERIC_READ로 설정한 경우
- 86,400 개 파일 검사 - 9,531 ms
2) _access 사용
- 86,400 개 파일 검사 (8,640 파일 존재) - 219 ms
- 2,592,000 개 파일 검사 (0개 파일 존재) - 890 ms
3) PathIsDirectory, PathFileExists 사용
이런 API도 있었군요.
- 86,400 개 파일 검사 (8,640 파일 존재) - 219 ms
- 2,592,000 개 파일 검사 (0개 파일 존재) - 859 ms
최종결론: _access 나 PathIsDirectory 계열을 사용하자!
- 2010.12.09 by Johsua95
어떻게 확인하면 가장 빠르게 파일/폴더 여부를 확인할 수 있을까?
1) 가능한 파일을 안 열어보고 알 수 있어야 하고,
2) 경로는 전체 경로를 알고 있어서 곧바로 접근 가능하며,
3) 불필요한 index 파일 없이 빠르게 접근하는 방법을 고민 중이다.
일단 원하는 파일의 이름은 언제든 전체 경로를 만들어낼 수 있다는 가정하에
가장 빠르게 해당 파일이 존재하는지 여부를 알 수 있다면,
FindFile 등을 이용한 불필요한 디렉토리 검색을 사용하지 않아도 되고,
불필요하게 폴더 구조를 저장할 정보 파일을 만들 필요 없을 터이니
이를 해결하고자 이래저래 방법을 찾아 테스트를 해 본다.
// 1) CreateFile 사용
// 1) 폴더 검사 HANDLE hFolderFile = NULL; // 두번째 파라미터 - 0, 여섯번째 파라미터 - FILE_FLAG_BACKUP_SEMANTICS hFolderFile = CreateFile(strDirPath, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if(INVALID_HANDLE_VALUE != hFile) { // Bingo! } // 2) 파일 검사 HANDLE hFile = NULL; // 두번째 파라미터 - 0 hFile = CreateFile(strFilePath, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(INVALID_HANDLE_VALUE != hFile) { // Bingo! }테스트 결과:
- 86,400 개 파일 검사 (8,640개 파일 존재) - 578 ms
- 2,592,000 개 파일 검사 (0개 파일 존재) - 2,484 ms
참고) dwDesiredAccess=GENERIC_READ로 설정한 경우
- 86,400 개 파일 검사 - 9,531 ms
2) _access 사용
// 폴더/파일 검사 if( (_access(strDirPath , 0 )) != -1 ) { // Bingo! }테스트 결과:
- 86,400 개 파일 검사 (8,640 파일 존재) - 219 ms
- 2,592,000 개 파일 검사 (0개 파일 존재) - 890 ms
3) PathIsDirectory, PathFileExists 사용
이런 API도 있었군요.
// 1) 폴더 검사 if(FALSE != PathIsDirectory(strDirPath)) { // Bingo! } // 2) 파일 검사 if( FALSE != PathFileExists(strFilePath) ) { // Bingo! }테스트 결과:
- 86,400 개 파일 검사 (8,640 파일 존재) - 219 ms
- 2,592,000 개 파일 검사 (0개 파일 존재) - 859 ms
최종결론: _access 나 PathIsDirectory 계열을 사용하자!
- 2010.12.09 by Johsua95
'Programming > Code' 카테고리의 다른 글
LNK2005: already defined in LIBCMT.lib(new.obj) (0) | 2011.01.04 |
---|---|
파일의 크기와 디스크 할당 크기의 차이 (0) | 2010.12.20 |
[C#] Collection vs List (0) | 2010.09.28 |
[C#] XML XPath 대소문자 구분없이 인식하기 (0) | 2010.07.06 |
[MFC] VS 2008에서 OnInitDialog 이벤트 함수 추가하기 (8) | 2010.05.26 |
댓글