我想知道是否有一种简单的方法在C ++中编程重命名Windows文件夹。
我想制作的节目是这样的:
rename folder "Something A" to "Something TEMP"
rename folder "Something B" to "Something A"
rename folder "Something TEMP" to "Something B"
答案 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);