我需要从我的 C++ 程序中重命名一个文件,所以我使用 rename(),它应该是标准的一部分(参见 cplusplus.com)。
在 Linux 上它工作正常,但在 Windows 64 位上 rename() 调用失败。rename() 调用不喜欢在其扩展名中有 4 个字符的源文件。
这是组合及其效果:
1) 源扩展名中的 4 个字符:
const int ret = rename("test.toml", "renamed.toml");
然后 ret == -1 并且没有重命名。
2) 源扩展名中的 3 个字符,目标中的 4 个字符:
const int ret = rename("test.tom", "renamed.toml");
然后 ret == 0 并且重命名成功。
3)无处不在的3个字符:
const int ret = rename("test.tom", "renamed.tom");
然后 ret == 0 并且重命名成功。
根据MSDN ,这里给出了可能的返回值列表,它不包括“-1”...
我切换到 cstdio 的 rename() 是因为我在 boost 中遇到了类似的问题:使用 boost:filesystem::rename() 抛出了一个我永远无法诊断的异常......
关于可能导致这种情况的任何想法?我在 Windows 64 位上使用 Visual Studio 2012 Express Update 3 (v11.00.60610.1)。谢谢。