странный результат при вызове SHFileOperation для удаления файла после установки MS office2003 - PullRequest
2 голосов
/ 23 февраля 2010

Я использую следующий код для удаления файла. это хорошо работает.

SHFILEOPSTRUCT FileOp;
ZeroMemory(&FileOp, sizeof(SHFILEOPSTRUCT));
FileOp.hwnd = m_hAppHandle;
FileOp.wFunc = FO_DELETE; //delete
FileOp.pFrom = szPath; 
FileOp.pTo = NULL; 
FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI;
FileOp.fAnyOperationsAborted = FALSE; 
FileOp.hNameMappings = NULL; 
FileOp.lpszProgressTitle = NULL;  

SHFileOperation(&FileOp);

Но недавно я нашел странную вещь, шаг воспроизведения следующим образом: 1. установить win2000 2. установить MS office2003

в первый раз (и только в первый раз) я вызываю функцию "SHFileOperation", чтобы удалить файл. затем окно с предупреждением системы показывает

"Windows не может создать ярлык здесь. Хотите, чтобы ярлык был размещен на рабочем столе? «

независимо от того, что я выбираю кнопку «ОК» или «НЕТ», чтобы закрыть окно с предупреждением. затем такое окно предупреждающего сообщения больше никогда не отображается, то есть после закрытия окна предупреждающего сообщения я могу вызвать функцию «SHFileOperation», чтобы удалить файл без такого системного предупреждающего сообщения.

Это поистине волшебство, это случается один раз.

Кто-нибудь знает какую-нибудь информацию? Спасибо.

1 Ответ

3 голосов
/ 23 февраля 2010

Элемент pFrom в SHFILEOPSTRUCT является списком строк с нулевым символом в конце и должен заканчиваться двойным нулем. Похоже, szPath - это одиночная строка с нулевым символом в конце, содержащая только один путь. Это будет означать, что SHFileOperation будет читать за пределами вашего предполагаемого конца pFrom.

Библиотека MSDN для SHFILEOPSTRUCT: http://msdn.microsoft.com/en-us/library/bb759795%28VS.85%29.aspx

Статья в блоге об этом: Не забудьте завершить двойными нулями те строки, которые вы передаете в SHFileOperation 1015

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...