重命名的Windows文件夹C ++(Rename Windows folders in C++)

2019-10-19 11:10发布

我在想,如果有C ++中的Windows文件夹重命名编程的简单方法。

我想提出的方案将是这样的:

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

Answer 1:

您需要使用MoveFile() 。

我知道这听起来滑稽,但它适用于目录了。 :)



Answer 2:

对于重命名一次的操作,请参见MoveFile或MoveFileEx MSDN上:

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


Answer 3:

除非你的文件夹有与国际字符的名称,你可以在实践中使用C标准库的::rename功能 ,从<stdio.h>头,例如如下:

#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." );
}

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

限制/潜在的问题:

  • C标准并没有明确说明rename也适用于文件夹。 我想这是因为C语言起源于Unix和Unix中的文件夹是文件。 在Windows文件夹的文件性质是隐藏访问的普通的手段。

  • 有没有宽字符变种rename ,所以在Windows上,它不能与国际字符一般手柄文件夹,除非您使用Windows API函数来首次获得纯ASCII“短名称” -在这种情况下,为什么使用rename的。

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

也许没有这些问题都存在于你的使用情况,但如果其中的任何一样,那么只需使用的MoveFile API函数 ,在其他的答案已经提到。



Answer 4:

另外,如果你使用boost ,你可以使用:

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


文章来源: Rename Windows folders in C++