728x90
반응형
질문 : 표준 C ++ / C ++ 11 / C를 사용하여 파일이 존재하는지 확인하는 가장 빠른 방법은 무엇입니까?
표준 C ++ 11, C ++ 또는 C에 파일이 있는지 확인하는 가장 빠른 방법을 찾고 싶습니다. 수천 개의 파일이 있고 파일에 대해 작업을 수행하기 전에 모든 파일이 있는지 확인해야합니다. 다음 함수에서 /* SOMETHING */
대신 무엇을 쓸 수 있습니까?
inline bool exist(const std::string& name) { /* SOMETHING */ }
답변
글쎄요, 저는 이러한 방법을 각각 100,000 번 실행하는 테스트 프로그램을 함께 던졌습니다. 절반은 존재하는 파일이고 절반은 그렇지 않은 파일입니다.
#include <sys/stat.h>
#include <unistd.h>
#include <string>
#include <fstream>
inline bool exists_test0 (const std::string& name) {
ifstream f(name.c_str());
return f.good();
}
inline bool exists_test1 (const std::string& name) {
if (FILE *file = fopen(name.c_str(), "r")) {
fclose(file);
return true;
} else {
return false;
}
}
inline bool exists_test2 (const std::string& name) {
return ( access( name.c_str(), F_OK ) != -1 );
}
inline bool exists_test3 (const std::string& name) {
struct stat buffer;
return (stat (name.c_str(), &buffer) == 0);
}
5 회 실행에 걸쳐 평균 100,000 개의 호출을 실행하는 총 시간에 대한 결과,
Method | Time |
exists_test0 (ifstream) | 0.485s |
exists_test1 (FILE fopen) | 0.302s |
exists_test2 (posix access()) | 0.202s |
exists_test3 (posix stat()) | 0.134s |
stat()
함수는 내 시스템 (Linux, g++
컴파일 됨)에서 최고의 성능을 제공했으며, 어떤 이유로 POSIX 함수 사용을 거부 할 경우 fopen
출처 : https://stackoverflow.com/questions/12774207/fastest-way-to-check-if-a-file-exist-using-standard-c-c11-c
728x90
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C와 C ++ 모두에서 유효한 코드가 각 언어로 컴파일 될 때 다른 동작을 생성하는 방법 (0) | 2021.06.11 |
---|---|
C ++에서 인터페이스를 선언하는 방법 (0) | 2021.06.10 |
C ++에서 ifstream을 사용하여 한 줄씩 파일 읽기 (0) | 2021.06.09 |
정적 std :: map 초기화<int, int> C ++에서 (0) | 2021.06.08 |
C ++에서 가상 함수가 필요한 이유 (0) | 2021.06.08 |