我有一段代码使用Windows SHFileOperation函数和FO_MOVE操作。指定的其他标志是FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT。
当目标驱动器已满时,会观察到一种特殊的奇怪行为。在这种情况下,MOVE无法将文件放在目标文件夹中,但源文件也丢失了。这是非常意外的,这导致数据丢失。
这是SHFileOperation的标准行为吗? 如果目标驱动器有空间,我们可以有类似MOVE的东西,否则将文件保留在原始位置?
答案 0 :(得分:0)
我没有听说过这个 - 听起来像个BUG。
最好选择更实用的方法,将移动操作分为FO_COPY,然后是FO_DELETE(假设FO_COPY操作成功)。
此外,如果您的实现可以检测源和目标卷的相同时间,您可能会获得一些效率。在这种情况下,您应该能够恢复为FO_MOVE。同一卷上的移动操作通常会提炼为重命名+元数据移动。
答案 1 :(得分:0)
如果目标文件对目标媒体或文件系统来说太大,SHFileOperation应返回DE_FILE_TOO_LARGE(0x85)。