windows C++ 设置/取消文件隐藏(unicode/多字节字符集均可处理)

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

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;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值