C 如果文件名在DOS 8.3样式中相同,MoveFile和MoveFileEx的工作原理就很奇怪

C 如果文件名在DOS 8.3样式中相同,MoveFile和MoveFileEx的工作原理就很奇怪,c,windows,winapi,C,Windows,Winapi,好的,我有文件名为 ANIME~1.MKV~FNH47B97 ANIME~1.MKV 它是完整的文件名。它是由用户命名的。 我想把第一个更名为ANIME~1.JPG。从操作系统的角度来看,它们似乎是相同的文件。MoveFile和MoveFileEx都不做任何事情。他们返回正常,仅此而已。 另一种奇怪的情况是,例如 ANIME~2.MKV~FNH47B97 ANIME~3.MKV 我想把第一个更名为ANIME~2.MKV 操作系统发现它与动漫~3.MKV一样,但仍然什么都不做。 这取决于文件夹

好的,我有文件名为

ANIME~1.MKV~FNH47B97
ANIME~1.MKV
它是完整的文件名。它是由用户命名的。 我想把第一个更名为ANIME~1.JPG。从操作系统的角度来看,它们似乎是相同的文件。MoveFile和MoveFileEx都不做任何事情。他们返回正常,仅此而已。
另一种奇怪的情况是,例如

ANIME~2.MKV~FNH47B97
ANIME~3.MKV
我想把第一个更名为ANIME~2.MKV 操作系统发现它与动漫~3.MKV一样,但仍然什么都不做。
这取决于文件夹中具有“相同dos 8.3名称”的文件数


有办法解决吗?可能需要一些额外的操作/标志?

将评论中的讨论总结为近似答案:
MoveFile(Ex)
适用于完整的文件名,尽管它可以通过其短名称找到源文件,但目标文件被视为长名称

这意味着目标文件名不应与现有文件的任何长或短文件名冲突。这可能就是第二个测试用例失败的原因。 第一个测试用例可能由于类似的原因而失败;我试过只使用这两个文件,并且
MoveFile
可以使用它


可以禁用DOS样式8.3短名称的生成,请参阅,但我真的不建议这样做。它可能会导致许多问题,例如,请参见。此外,这是一个应由系统管理员做出的决定,而不是任何应用程序。

MoveFile
MoveFileEx
旨在处理完整的文件名,而不是8.3版。8.3版本可选地为长文件名生成,但也可以关闭此生成。当然,我使用完整文件名。它由用户so命名。完整文件名和完整路径在第二种情况下,您显然无法将文件移动到其新名称,因为它与现有文件的(短?)名称冲突。并且没有办法禁用DOS8.3兼容性?我使用两个文件测试了第一种情况,它对我来说运行良好。第一个文件将被重命名,但这同样只在没有名称与任何长或短文件名冲突的情况下起作用。