FindFirstFile[
^] also finds hidden and system files, which are probably the additional file you are getting. You need to filter these out if you do not want them.
Use the
dwFileAttributes
attribute of the
WIN32_FIND_DATA structure[
^] and check for the
FILE_ATTRIBUTE_HIDDEN
and
FILE_ATTRIBUTE_SYSTEM
attributes.
Replace
while(1)
{
wchar_t buf[128];
FILETIME ft = fd.ftLastWriteTime;
SYSTEMTIME sysTime;
FileTimeToSystemTime(&ft, &sysTime);
wsprintf(buf, L"%d-%02d-%02d",sysTime.wYear, sysTime.wMonth, sysTime.wDay);
file_data filedata;
filedata.sLastAccessTime= buf;
filedata.nFileSize = (((__int64)fd.nFileSizeHigh) << 32) + fd.nFileSizeLow;
map[fd.cFileName]= filedata;
if (FindNextFile(h, &fd) == FALSE)
break;
}
with
file_data filedata;
SYSTEMTIME sysTime;
FILETIME ft;
wchar_t buf[128];
while(1)
{
if( fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN != FILE_ATTRIBUTE_HIDDEN && fd.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM != FILE_ATTRIBUTE_SYSTEM )
{
ft = fd.ftLastWriteTime;
FileTimeToSystemTime(&ft, &sysTime);
wsprintf(buf, L"%d-%02d-%02d",sysTime.wYear, sysTime.wMonth, sysTime.wDay);
filedata.sLastAccessTime= buf;
filedata.nFileSize = (((__int64)fd.nFileSizeHigh) << 32) + fd.nFileSizeLow;
map[fd.cFileName]= filedata;
}
if (FindNextFile(h, &fd) == FALSE)
break;
}