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:filesystem::rename() を使用すると、診断できなかった例外がスローされました...
これを引き起こしている可能性のあるものについて何か考えはありますか?? Windows 64 ビットで Visual Studio 2012 Express Update 3 (v11.00.60610.1) を使用しています。ありがとう。