You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.1 KiB
C++

#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
//#include "afx.h"
#include <windows.h>
#include "SFind.h"
//--------------------------------------------------------------------
SFind::SFind(char *SearchMask, char *SearchPath)
{
hFind = NULL;
hFind2 = NULL;
strcpy(SSearchPath, SearchPath);
//--make sure ends in backslash
if (strlen(SSearchPath))
if (SSearchPath[strlen(SSearchPath) - 1] != '\\')
strcat(SSearchPath, "\\");
strcpy(ToSearch, SSearchPath);
strcat(ToSearch, SearchMask);
strcpy(SSearchPattern, SearchMask);
}
//--------------------------------------------------------------------
SFind::~SFind()
{
if (hFind)
{
FindClose(hFind);
hFind = NULL;
}
if (hFind2)
{
FindClose(hFind2);
hFind2 = NULL;
}
}
//--------------------------------------------------------------------
bool SFind::Found(void)
{
ZeroMemory(&FindFileData, sizeof(WIN32_FIND_DATA));
//----first?-----
if (!hFind)
{
hFind = FindFirstFile(ToSearch, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
hFind = NULL; // nothing
return(false);
}
} else { // find next
if (!FindNextFile(hFind, &FindFileData))
return(false); // finished
}
//-----got something?----
if (!strlen(FindFileData.cFileName))
return(false);
//-----we do not want .. or . ---------
while (strcmp(FindFileData.cFileName, ".") == 0 || strcmp(FindFileData.cFileName, "..") == 0)
{
if (!Found()) // recall
return(false);
}
//-------found-------------
return(true);
}
//--------------------------------------------------------------------
char *SFind::FileName(void)
{
strcpy(TempReturnFullFilename, SSearchPath);
strcat(TempReturnFullFilename, FindFileData.cFileName);
return(TempReturnFullFilename);
}
//--------------------------------------------------------------------
char *SFind::JustFileName(void)
{
return(FindFileData.cFileName);
}
//--------------------------------------------------------------------
bool SFind::IsFolder(void)
{
if (hFind && FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
return(true);
else
return(false);
}