在C++中重命名Windows文件夹
Rename Windows folders in C++
我想知道是否有一种用C++编程的简单方法——重命名Windows文件夹。
我想制作的程序是这样的:
rename folder "Something A" to "Something TEMP"
rename folder "Something B" to "Something A"
rename folder "Something TEMP" to "Something B"
您需要使用MoveFile()
我知道这听起来很有趣,但它也适用于目录。:)
有关重命名一次的操作,请参阅MSDN上的MoveFile或MoveFileEx:
BOOL WINAPI MoveFile(
_In_ LPCTSTR lpExistingFileName,
_In_ LPCTSTR lpNewFileName
);
除非文件夹的名称带有国际字符,否则您实际上可以从<stdio.h>
标头使用C标准库的::rename
函数,例如:
#include <stdio.h> // ::rename
#include <stdlib.h> // ::exit, EXIT_FAILURE
auto fail( char const* const message )
-> bool
{
fprintf( stderr, "!%sn", 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"短名称"–在这种情况下为什么要使用CCD_ 5。现代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);
相关文章:
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- vcruntime.h 从 Windows 包含文件夹中丢失?
- 如何从Windows控制台调用.exe(C++)以在不同的目录(或任何目录)中创建文件夹?
- Windows C++:文件夹移动访问被拒绝错误
- 如何使用Windows API C++更改已创建的文件夹/目录安全权限
- Windows 后台服务(系统配置文件)无法使用 C++ 访问 win 10 上的用户 appData 文件夹?
- 确实可以提高directory_iterator在Windows上按字母顺序访问文件和文件夹
- 如何在 Windows 中立即刷新文件夹图标
- 使用内置的Windows方法获取文件夹的内容
- 我可以在C 中的Windows中读取一个文件,而无需锁定包含文件的文件夹
- 从Windows上的系统工作的服务中获取用户文档文件夹.C++
- Windows 资源管理器打开文件夹还原
- 无法使用 ofstream 写入 Windows 7 中的临时文件夹
- 如何在QT中获取Windows默认文件夹的本地名称
- Qfiledialog:文件夹名称在Windows下方出现两次
- 打开Windows Explorer中的公共文档文件夹
- 将Windows上32位和64位的Boost构建到同一文件夹中
- 在C++中重命名Windows文件夹
- SHGetFolderPath 已弃用:检索 Windows 文件夹路径的替代方法是什么
- 如何判断文件夹是否是特殊Windows文件夹的子文件夹