hur.cn - 华软网

 热门搜索

使用SHFileOperation删除文件夹遇到的问题

  作者:未知    来源:网络    更新时间:2010/8/26
程序运用SHFileOperation删除资料夹,执行完之后前往值为0(正确),但在File Explorer中刷新之后被删除资料夹又出现了,双击它,提醒“拒绝访问”之类的信息。在命令行下dir也会显示该资料夹,但没法访问。直到程序退出之后,资料夹才自动消失。

另,在运用该API前程序必需执行一个往该目录下写资料的分支才可重现此问题,否则可正常删除目录。但该写资料分支在写完成之后资料句柄确已关闭,而在执行SHFileOperation前,尝试手动在File Explorer中删除该目录的确也能正常执行。


代码以下:

    SHFILEOPSTRUCT shfos = { 0 };
    shfos.hwnd = NULL;
    shfos.wFunc = FO_DELETE;
    shfos.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI;
    shfos.pFrom = szPathBuffer;     // 双'\0'末端路径字符串
    shfos.pTo = NULL;
    shfos.lpszProgressTitle = NULL;

    int ret = ::SHFileOperation(&shfos);
---华软 网友回答---
感觉可能照旧有资料句柄等没有关闭,用process explorer等查看资料是否都正确关闭句柄等...
---华软网友回复---
有没有其余程序代码在这之前措置惩罚过这个目录下的资料,且另有句柄没有关闭

---华软网友回复---
肯定是有句柄没关,这个句柄可能是资料,也可能是目录,包括FindFile及CurrentDirectory,也可能是其它相关进程打开了句柄。
---华软网友回复---
应该是句柄没有关闭把!!!!
---华软网友回复---
谢谢列位。仔细检查了一下,的确是有FindFile句柄泄漏了,关闭后即正常。Process Explorer很有用。谢谢!
---华软网友回复---
shfos.pFrom = szPathBuffer; // 双'\0'末端路径字符串
这个是重点!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。