Как сказал shf301, код ошибки 87: ERROR_INVALID_PARAMETER. Вероятно, это происходит потому, что вы не инициализируете содержимое неиспользуемых полей SHFILEOPSTRUCT, поэтому они будут содержать случайные значения. В документации сказано, что pTo
"должно быть установлено в NULL, если оно не используется"; ОС может проверять значение этого поля и возвращать ошибку, если оно не равно NULL.
Сначала установите все на ноль, выполнив:
SHFILEOPSTRUCT fileStruct = { 0 };
или
SHFILEOPSTRUCT fileStruct;
ZeroMemory(&fileStruct, sizeof(SHFILEOPSTRUCT));
Код ошибки 2: ERROR_FILE_NOT_FOUND
; возможно, безопасно игнорировать этот код ошибки, если возможно, что файл не существует или пользователь удалил его до того, как ваша программа попытается удалить его. (Обратите внимание, что даже если вы проверите, что файл существует, прежде чем пытаться удалить его, другой процесс мог бы удалить его тем временем, поэтому вам всегда нужно будет обработать эту ошибку.)