CppModules
C++17 1 std::filesystem exists 判断目录或者文件是否存在 create_directory 创建目录,被创建的父目录必须存在 create_directories 级联创建目录,提供的路径凡是不存在就创建 remove 删除文件或者空目录 remove_all 删除目录中的内容 ...
C++17 1 std::filesystem exists 判断目录或者文件是否存在 create_directory 创建目录,被创建的父目录必须存在 create_directories 级联创建目录,提供的路径凡是不存在就创建 remove 删除文件或者空目录 remove_all 删除目录中的内容 ...
for C++ Use 1 (注册表方式)使用Windows头文件修改环境变量 **(AutoDeployer_Cpp)常用使用方式: **AddWindowsEnvironment.h foryyz 1.1 添加环境变量 ENV: KEY - VALUE 1.1.1 用户级别 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <iostream> #include <windows.h> #include <string> // 修改用户级别 bool setUserEnvironmentVariable(const std::wstring& name, const std::wstring& value) { HKEY hKey; // 打开用户环境变量的注册表键 if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Environment", 0, KEY_SET_VALUE, &hKey) != ERROR_SUCCESS) { std::wcerr << L"Failed to open registry key for user environment variables." << std::endl; return false; } // 设置环境变量的值 if (RegSetValueExW(hKey, name.c_str(), 0, REG_EXPAND_SZ, reinterpret_cast<const BYTE*>(value.c_str()), (value.size() + 1) * sizeof(wchar_t)) != ERROR_SUCCESS) { std::wcerr << L"Failed to set registry value for: " << name << std::endl; RegCloseKey(hKey); return false; } RegCloseKey(hKey); // 通知系统更新环境变量 SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE, 0, reinterpret_cast<LPARAM>(L"Environment"), SMTO_ABORTIFHUNG, 5000, nullptr); return true; } 1.1.2 系统级别 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 修改系统级别环境变量 bool setPermanentEnvironmentVariable(const std::wstring& name, const std::wstring& value) { HKEY hKey; // 打开注册表键:SYSTEM 环境变量位于 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", 0, KEY_SET_VALUE, &hKey) != ERROR_SUCCESS) { std::wcerr << L"Failed to open registry key for environment variables." << std::endl; return false; } // 设置环境变量的值 if (RegSetValueExW(hKey, name.c_str(), 0, REG_EXPAND_SZ, reinterpret_cast<const BYTE*>(value.c_str()), (value.size() + 1) * sizeof(wchar_t)) != ERROR_SUCCESS) { std::wcerr << L"Failed to set registry value for: " << name << std::endl; RegCloseKey(hKey); return false; } RegCloseKey(hKey); // 通知系统更新环境变量 SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE, 0, reinterpret_cast<LPARAM>(L"Environment"), SMTO_ABORTIFHUNG, 5000, nullptr); return true; } 1.1.3 主函数 1 2 3 4 5 6 // 主函数 int main() { setUserEnvironmentVariable(L"JAVA_HOME", L"C:\\Path\\To\\Javahome"); // 以用户级别举例 system("pause"); return 0; } 1.2 获取环境变量的值 1.2.1 获取变量name的值 1 2 3 4 5 6 7 8 9 10 11 12 13 std::wstring getEnvironmentVariable(const std::wstring& name) { // 获取环境变量的值 wchar_t buffer[32767]; DWORD size = GetEnvironmentVariableW(name.c_str(), buffer, 32767); if (size == 0) { return L""; } return std::wstring(buffer, size); } // 获取现有的PATH环境变量 std::wstring currentPath = getEnvironmentVariable(L"PATH"); std::wcout << currentPath; 1.2.2 获取PATH的值 (推荐)方式1. 通过注册表读取(用户级) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 std::wstring getUserPathFromRegistry() { HKEY hKey; wchar_t buffer[32767]; // 用于存储读取的路径 DWORD bufferSize = sizeof(buffer); // 打开 HKEY_CURRENT_USER\Environment 注册表键 if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Environment", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { std::wcerr << L"Failed to open registry key for user environment variables." << std::endl; return L""; } // 从注册表中获取 PATH 变量的值 if (RegQueryValueExW(hKey, L"PATH", nullptr, nullptr, reinterpret_cast<BYTE*>(buffer), &bufferSize) != ERROR_SUCCESS) { std::wcerr << L"Failed to read PATH from registry." << std::endl; RegCloseKey(hKey); return L""; } RegCloseKey(hKey); return std::wstring(buffer); } std::wstring userPath = getUserPathFromRegistry(); 方式2. 通过方法获取(进程级) 注意:这种方式获得的PATH值=用户级+系统级 ...
1 VS2022 中文乱码 方式1. 统一更改为utf-8 1 2 // 添加代码 设置控制台编码为utf-8 system("chcp 65001"); 方式2.命令行设置/utf-8 vs2022菜单栏 - 项目 - 属性 - 配置属性 - C/C++ - 命令行 加上 /utf-8
CMake CMake是一门为C++服务的语言,即 CMake Language CMake和Vcpkg的集成 0 CMake安装 Download CMake Windows 下载MSI安装包,安装即可 1 CMake 项目流程 CMakeLists.txt详解 1.1 创建Cpp源码文件 hello.cpp 1 2 3 4 5 6 #include <iostream> int main(){ std::cout << "Hello" << std::endl; return 0; } 1.2 创建CMake配置文件 CMakeLists.txt ...
Vcpkg - C++包管理工具的基本配置 1 安装 1.1 下载包文件 1 git clone https://github.com/microsoft/vcpkg.git 1.2 执行安装文件 1 2 3 cd .\vcpkg\ .\bootstrap-vcpkg.bat # Linux执行bootstrap-vcpkg.sh文件 此时,在vcpkg文件夹下会生成vcpkg.exe文件 ...
Cpp - STL STL - Strandard Template Library –标准模板库 –为了提高代码复用性 容器(Container) - 数据结构 序列式容器 - 强调值的排序 关联式容器 - 二叉树结构 算法(Algorithm) - 常用算法 质变算法 非质变算法 迭代器(Iterator) - 容器与算法之间的胶合剂 仿函数 - 行为类似函数,可作为算法的某种策略 适配器(配接器) 空间配置器 1 String 字符串 容器 1.1 构造函数 函数原型: ...
一、内存分区模型 C++程序执行时,内存大方向分为4个区域 **代码区:**存放函数体的二进制代码 全局区:存放全局变量和静态变量以及常量 栈区:由编译器自动分配释放,存放函数的参数值,局部变量 - 特点:先进后出 堆区:由程序员分配和释放,若不主动释放则在程序结束时由操作系统回收 1.1 程序运行前 编译后生成exe可执行程序,未执行该程序前分为两个区域 ...
一、认识C++ 1.1 HelloWorld程序 1 2 3 4 5 6 7 8 9 10 11 #include <iostream> using namespace std; int main() { cout << "hello world" << endl; system("pause"); return 0; } 1.2 注释 1 2 3 4 5 6 //单行注释 /* 多行 注释 */ 1.3 变量 **作用:**给一段指定的内存空间起名 ...