用C ++重命名Windows文件夹

时间:2014-03-03 16:03:51

标签: c++ windows rename

我想知道是否有一种简单的方法在C ++中编程重命名Windows文件夹。

我想制作的节目是这样的:

rename folder "Something A" to "Something TEMP"
rename folder "Something B" to "Something A"
rename folder "Something TEMP" to "Something B"

4 个答案:

答案 0 :(得分:9)

您需要使用MoveFile()

我知道这听起来很有趣,但它也适用于目录。 :)

答案 1 :(得分:2)

有关重命名一次的操作,请参阅MSDN上的MoveFile或MoveFileEx:

BOOL WINAPI MoveFile(
  _In_  LPCTSTR lpExistingFileName,
  _In_  LPCTSTR lpNewFileName
);

答案 2 :(得分:2)

除非您的文件夹中包含带国际字符的名称,否则您实际上可以使用<stdio.h>标题中的C standard library's ::rename function,例如如下:

#include <stdio.h>      // ::rename
#include <stdlib.h>     // ::exit, EXIT_FAILURE

auto fail( char const* const message )
    -> bool
{
    fprintf( stderr, "!%s\n", message );
    exit( EXIT_FAILURE );
}

auto main()
    -> int
{
    rename( "a", "temp" )
        == 0
        || fail( "Renaming a failed." );
    rename( "b", "a" )
        == 0
        || fail( "Renaming b failed." );
    rename( "temp", "b" )
        == 0
        || fail( "Renaming temp failed." );
}

这也适用于其他操作系统。

限制/潜在问题:

  • C标准没有明确声明rename也适用于文件夹。我想这是因为C源自Unix,而在Unix中,文件夹是一个文件。在Windows中,文件夹的文件性质通过普通的访问方式隐藏。

  • rename没有广泛的字符变体,因此在Windows中它通常不能处理带有国际字符的文件夹,除非您使用Windows API函数首先获取纯ASCII“短名称” - 在这种情况下,为什么要使用rename

  • 现代Windows程序通常是面向字符的,这意味着转换为ANSI字符编码,这很不方便。

对于您的用例,可能没有这些问题,但如果有任何问题,那么只需使用the MoveFile API function,如其他答案中已经提到的那样。

答案 3 :(得分:1)

或者,如果您使用boost,则可以使用:

std::string name("old_dir");
std::string new_name("new_dir");
system::error_code ec = boost::filesystem::rename(name, new_name);