Я пытаюсь написать программу, которая будет удалять набор файлов / папок, которые соответствуют определенному шаблону именования (подстановочные знаки) на основе их дат, используя Windows API
...
SHFILEOPSTRUCT shFileOpStruct = {
.hwnd = NULL,
.wFunc = processByDate->op,
.pTo = NULL,
.fFlags = FOF_NOCONFIRMATION | FOF_SILENT
};
buildReferenceDate( &refTime, processByDate->nDays );
hFind = FindFirstFile( processByDate->srcFileName, &findFileData );
errorCode = GetLastError();
while ( errorCode == ERROR_SUCCESS ) {
LONG res = CompareFileTime( &refTime, &findFileData.ftCreationTime );
if ( (processByDate->nDays ^ res) > 0 ) {
sprintf( strrchr(processByDate->srcFileName, '\\') + 1, "%s%c",
findFileData.cFileName, '\0');
shFileOpStruct.pFrom = processByDate->srcFileName;
fprintf( stdout, "\n%s\n", shFileOpStruct.pFrom);
fprintf( stdout, "\n0x%x\n", SHFileOperation( &shFileOpStruct ));
}
FindNextFile( hFind, &findFileData );
errorCode = GetLastError();
}
if ( errorCode != ERROR_NO_MORE_FILES )
displayError ( stdout, errorCode );
...
Удаляется только первый соответствующий файл, потому что FindNextFile заканчивается «Дескриптор недействителен». по-видимому, SHFileOperation как-то делает недействительным дескриптор файла (или, по крайней мере, так я полагаю). Единственное решение, которое я могу придумать, - это сохранить имена соответствующих файлов / папок и удалить их один за другим. Есть ли другое простое решение?
Спасибо