728x90
현재 디렉토리 내에 있는 모든 파일만 표시 해 보기
좀 어줍잖게 짜기 해도 뭐...윈도우 용이므로 *NIX 계열은 아님
상수로 검색할 디렉토리를 아규먼트로 받아서 처리 한다.
bool searchFilesDirectory(const char *sDir)
{
WIN32_FIND_DATA fdFile;
HANDLE hFind = NULL;
char sPath[2048];
char buffer [10240];
if(!sDir) return false;
sprintf(sPath, "%s\\*.*", sDir);
if((hFind = FindFirstFile(sPath, &fdFile)) == INVALID_HANDLE_VALUE)
{
LOG_TRACE(LOG_ERROR, "2.Path not found: %s\n", sDir);
return false;
}
do
{
if(strcmp(fdFile.cFileName, ".") != 0
&& strcmp(fdFile.cFileName, "..") != 0)
{
sprintf(sPath, "%s\\%s", sDir, fdFile.cFileName);
if(fdFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
searchDirectory(sPath); //Recursion, I love it!
}
else
{
memset(buffer, 0x00, sizeof(buffer));
std::string cppPath(sPath);
if (FileDBMgr->ptrWNoSqlDB()->set(UtilW32::base64_encode(reinterpret_cast<const unsigned char*>(sPath), strlen(sPath)), cppPath))
{
fileCnt++;
if(((fileCnt % PRINT_CNT) == 0))
{
LOG_TRACE(LOG_INFO, ".");
lineCnt++;
}
}
}
}
}
while(FindNextFile(hFind, &fdFile));
FindClose(hFind);
return true;
}
:사용법
다음은 connstrct 라는 구조체의 포인터를 받아는 데 여기에 들어 가 있는 것이 delimiter로 콤마가 찍힌 리스트를 받아서 해당 delimiter를 짤라서 하나씩 순환하면서 파일을 찍어 보는 함수이다.
소스 코드에서 보면 뜬금없는 코드가 보이는 데,
FileDBMgr->openWNoSql(constr);
FileDBMgr->closeWNoSql();
FileDBMgr->ptrWNoSqlDB()->set(...);
이는 Kyotocabinet 이라는 Nosql 데이터베이스를 사용해서 파일리스트를 저장하는 로직에서 떼어다 붙인 것이다.
bool makePhysicalFileList(connstrct *constr)
{
char** tokens = NULL;
FileDBMgr->openWNoSql(constr);
tokens = str_split(constr->searchpath, ',');
if (tokens)
{
int i;
char *sDir = NULL;
for (i = 0; (sDir = *(tokens + i)); i++)
{
if(!sDir) break;
if(UtilW32::DirExists(sDir))
{
//cout << "directory=" << sDir << endl;
LOG_TRACE(LOG_ERROR, "\nsDir %s \n", sDir);
searchDirectory(sDir);
free(sDir);
sDir = NULL;
}
}
free(tokens);
LOG_TRACE(LOG_ERROR, "\r\n");
}
FileDBMgr->closeWNoSql();
cout << "Total count = " << fileCnt << endl;
}
이상.
728x90
'프로그래밍' 카테고리의 다른 글
MinGW과 Pro*C (0) | 2023.03.19 |
---|---|
Pro*C 프로그래밍 (0) | 2023.03.18 |
sqlite + kyotocabinet 사용 (0) | 2023.03.15 |
Maraa 와 wiringPi 라이브러리로 라즈베리 파이에서 센서 제어해 보기 (0) | 2023.03.13 |
개발하고 있는 웹페이지의 javascript 파일이 갱신 되지 않을때 (0) | 2023.03.12 |