windows C++ 设置/取消文件隐藏 unicode或者多字节字符集均可处理
VS: [项目属性]->[配置属性]->[常规]->[字符集]
在该属性中选择"使用多字节字符集"或者"使用Unicode字符集" 本代码段均可处理
#include <string>
#ifdef _WIN32
#include <windows.h>
std::string WcharToChar(const wchar_t* wp, size_t encode = CP_ACP)
{
std::string str;
int len = WideCharToMultiByte((UINT)encode, 0, wp, (int)wcslen(wp), NULL, 0, NULL, NULL);
char* mychar = new char[len + int(1)];
WideCharToMultiByte((UINT)encode, 0, wp, (int)wcslen(wp), mychar, len, NULL, NULL);
mychar[len] = '\0';
str = mychar;
delete[] mychar;
return str;
}
std::wstring CharToWchar(const char* c, size_t encode)
{
std::wstring str;
int len = MultiByteToWideChar((UINT)encode, 0, c, (int)strlen(c), NULL, 0);
wchar_t* mywchar = new wchar_t[len + int(1)];
MultiByteToWideChar((UINT)encode, 0, c, (int)strlen(c), mywchar, len);
mywchar[len] = '\0';
str = mywchar;
delete[] mywchar;
return str;
}
#endif // _WIN32
// 取消隐藏文件
void show_file(const std::string& szFile)
{
#ifdef _WIN32
#ifdef UNICODE
std::wstring wstr = CharToWchar(szFile.c_str(), CP_ACP);
::SetFileAttributes(wstr.c_str(), FILE_ATTRIBUTE_NORMAL);
#else
SetFileAttributes(szFile.c_str(),FILE_ATTRIBUTE_NORMAL);
#endif // !UNICODE
#endif // _WIN32
}
// 设置文件隐藏
void hide_file(const std::string& szFile)
{
#ifdef _WIN32
#ifdef UNICODE
std::wstring wstr = CharToWchar(szFile.c_str(), CP_ACP);
::SetFileAttributes(wstr.c_str(), FILE_ATTRIBUTE_HIDDEN);
#else
::SetFileAttributes(szFile.c_str(), FILE_ATTRIBUTE_HIDDEN);
#endif // !UNICODE
#endif // _WIN32
}
int main(int argc, char *argv[])
{
hide_file("E:\\test.dat");
show_file("E:\\test.dat");
return 0;
}

本文介绍了如何在Windows环境下使用C++设置和取消文件的隐藏状态,同时处理Unicode和多字节字符集。通过`SetFileAttributes`函数实现文件属性的切换,并提供CharToWchar和WcharToChar转换函数以适应不同字符集。
848

被折叠的 条评论
为什么被折叠?



