【问题标题】:Renaming a directory in C++在 C++ 中重命名目录
【发布时间】:2012-05-23 12:37:31
【问题描述】:

我正在尝试将目录重命名为与 C++ 测试中的现有目录相同的名称。我试过 SHFileOperation。这实际上主要工作。问题是我们有一个自动测试,并且由于某种原因在自动化测试期间测试在这里失败了。在手动运行时工作正常,但自动化不是那么多。我们认为即使我将标志设置为不允许,也可能会弹出一些对话框。我还尝试重命名 C++ 函数。尝试将某些内容重命名为现有名称时,重命名似乎不起作用。

那我还有其他方法可以用吗?

【问题讨论】:

  • 你使用绝对目录路径还是相对路径?如果路径是相对的,则可能是自动化测试是从其他地方启动的,并且正在重命名的目录不存在。
  • 我看不出您如何重命名某些东西并将新名称作为现有对象的名称。那总是会失败的。
  • @DavidHeffernan 不是带有 mv(1) 的 UNIX,但我支持该议案。他可能希望“覆盖”也是原子的
  • 如果将目录重命名为现有目录名,则基本上是合并目录

标签: c++ directory naming


【解决方案1】:

如果对你很重要,你可以试试boost::filesystem,它具有便携性的优势。

namespace bfs=boost::filesystem;

std::string name("old_dir", "new_dir");

system::error_code ec = bfs::rename(name, new_name);

ec 是错误代码对象,可以引用 here,以便您检查错误情况。

【讨论】:

  • 我必须下载 boost 库,不幸的是,这不是一个选择。
【解决方案2】:

我肯定会选择boost,但如果你不能使用它,你必须知道C++没有内置对此类文件操作的支持。

你能做的最好的就是使用 C 的 rename():

http://en.cppreference.com/w/c/io/rename

【讨论】:

    【解决方案3】:

    您可以尝试 MoveFile,它也适用于目录。 尽管我怀疑是否有任何 API 能够将某些内容重命名为已经存在的名称。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa365239(v=vs.85).aspx

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2012-03-13
      • 2011-10-01
      • 2013-01-31
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      相关资源
      最近更新 更多