我试图将目录重命名为与 C++ 测试中的现有目录相同的名称。我试过 SHFileOperation。这实际上主要工作。问题是我们有一个自动测试,由于某种原因,在自动测试期间,测试在这里失败了。在手动运行时工作正常,但自动化不是那么多。我们认为即使我将标志设置为不允许,也可能会弹出一些对话框。我还尝试重命名 C++ 函数。尝试将某些内容重命名为现有名称时,重命名似乎不起作用。
那么我还有其他方法可以使用吗?
如果这对您很重要,您可以尝试boost::filesystem
哪个具有便携性的优势。
namespace bfs=boost::filesystem;
std::string name("old_dir", "new_dir");
system::error_code ec = bfs::rename(name, new_name);
ec
可以在此处引用的is 和错误代码对象,以便您检查错误情况。
我肯定会选择 boost,但如果你不能使用它,你必须知道 C++ 没有对此类文件操作的内置支持。
你能做的最好的就是使用 C 的 rename():
您可以尝试也适用于目录的 MoveFile。尽管我怀疑是否有任何 API 能够将某些内容重命名为已经存在的名称。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa365239(v=vs.85).aspx