【发布时间】:2010-12-31 04:08:36
【问题描述】:
我正在使用函数 SHFileOperation() 将文件发送到回收站,我收到 2 个错误,我不知道它们的含义,因为使用此函数的错误代码不是 GetLastError() 值。
当函数 SHFileOperation() 失败时,返回值为 0x57(十进制 87)和 0x2(十进制 2)。谁能帮我发现这些错误的定义(特别是当您考虑使用此函数时,这些错误不是GetLastError() 代码的一部分)。
一些重要信息:
我使用的是 Windows 7(我知道 MSDN 说要使用 IFileOperation 而不是 SHFileOperation,但我想让我的应用程序向后兼容,这就是我使用 SHFileOperation 的原因)。如果由于我在 Windows 7 上使用 SHFileOperation 而发生错误,我可以使用什么解决方案来使其在 2000 及更高版本的所有 Windows 版本上都能正常工作?
据我所知,我的 SHFILEOPSTRUCT 是正确的(使用了正确的标志,.pFrom 是一个双空结尾的字符串),我已经进行了广泛的调试。我确定的一件事是我的文件路径是正确的(导致一个真实的文件并且它的格式正确)。
大约 2/5 次 SHFileOperation() 工作,这意味着它将文件发送到回收站并且不返回错误
.
BOOL result;
SHFILEOPSTRUCT fileStruct;
fileStruct.hwnd = hwnd;
fileStruct.wFunc = FO_DELETE;
fileStruct.pFrom = dest.c_str();
fileStruct.fFlags = FOF_FILESONLY; // FOF_ALLOWUNDO
fileStruct.fAnyOperationsAborted = result;
// Call operation(delete file)
int success = SHFileOperation( &fileStruct );
// if delete was successful
if ( success != 0 )
{
printf( "%s \t %X %d \n", dest.c_str(), success, success );
cout << result << endl;
MessageBox( hwnd, "Failed to delete file", "Error", MB_OK|MB_ICONERROR );
return;
}
【问题讨论】:
-
您的评论具有误导性。您应该将其传递到与 if 相同的行或 if 块内,并将其更改为
// if delete failed