以一种标准的办法,获取工作目录

void GetWorkingFolder(std::string& folder){
    folder.resize(MAX_PATH*2 + 1, '\0'); //留长一点,防止后面再连接一个Cloudwalk时出错

    //获取当前程序目录,如果是C盘,则获取APPDATA目录,然后在末尾添加目录后缀
    HANDLE hExeHandle = GetModuleHandle(NULL);
    if(hExeHandle != nullptr) {
        GetModuleFileNameA((HMODULE)hExeHandle, &folder[0], MAX_PATH);
        folder = folder.substr(0, folder.find_last_of("\\") + 1);
    } else { //失败场景下,获取当前工作目录
        if (0 == GetCurrentDirectoryA(MAX_PATH, &folder[0])) {
            //再失败,那就只能默认.\目录了
            folder = ".";
        }
    }

    //判断是否首字母为C,写死吧,不去判断windows是否安装在其他盘了
    if ( (folder[0] == 'C') || (folder[0] == 'c') ) {
        std::string strTemp(MAX_PATH + 1, '\0');
        if (S_OK == SHGetFolderPathA(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_DEFAULT, &strTemp[0])) {
            folder = strTemp;
        }
    }

    //判断最后一个字符是否为
    if (folder[folder.length() - 1] != '\\') {
        folder += '\\';
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值