2

我需要从我的 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)。谢谢。

4

0 回答 0