如果目标驱动器已满,SHFileOperation FO_MOVE将删除文件

时间:2010-05-26 13:09:27

标签: c++ winapi shfileoperation

我有一段代码使用Windows SHFileOperation函数和FO_MOVE操作。指定的其他标志是FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT。

当目标驱动器已满时,会观察到一种特殊的奇怪行为。在这种情况下,MOVE无法将文件放在目标文件夹中,但源文件也丢失了。这是非常意外的,这导致数据丢失。

这是SHFileOperation的标准行为吗? 如果目标驱动器有空间,我们可以有类似MOVE的东西,否则将文件保留在原始位置?

2 个答案:

答案 0 :(得分:0)

我没有听说过这个 - 听起来像个BUG。

最好选择更实用的方法,将移动操作分为FO_COPY,然后是FO_DELETE(假设FO_COPY操作成功)。

此外,如果您的实现可以检测源和目标卷的相同时间,您可能会获得一些效率。在这种情况下,您应该能够恢复为FO_MOVE。同一卷上的移动操作通常会提炼为重命名+元数据移动。

答案 1 :(得分:0)

如果目标文件对目标媒体或文件系统来说太大,SHFileOperation应返回DE_FILE_TOO_LARGE(0x85)。