我在想,如果有C ++中的Windows文件夹重命名编程的简单方法。
我想提出的方案将是这样的:
rename folder "Something A" to "Something TEMP"
rename folder "Something B" to "Something A"
rename folder "Something TEMP" to "Something B"
我在想,如果有C ++中的Windows文件夹重命名编程的简单方法。
我想提出的方案将是这样的:
rename folder "Something A" to "Something TEMP"
rename folder "Something B" to "Something A"
rename folder "Something TEMP" to "Something B"
您需要使用MoveFile() 。
我知道这听起来滑稽,但它适用于目录了。 :)
对于重命名一次的操作,请参见MoveFile或MoveFileEx MSDN上:
BOOL WINAPI MoveFile(
_In_ LPCTSTR lpExistingFileName,
_In_ LPCTSTR lpNewFileName
);
除非你的文件夹有与国际字符的名称,你可以在实践中使用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函数 ,在其他的答案已经提到。
另外,如果你使用boost
,你可以使用:
std::string name("old_dir");
std::string new_name("new_dir");
system::error_code ec = boost::filesystem::rename(name, new_name);