C++如何定义文件绝对路径 实现macOS下任意位置运行均可访问固定路径文件
问题根因
- C++标准库的文件操作接口不支持Shell的波浪号
~自动展开,你代码中写的~/.universidad/curso_activo.txt里的~会被识别为普通字符,无法指向当前用户的家目录 - 代码存在变量名拼写错误:你定义的ofstream对象名为
active_course,但后续判断文件是否打开成功、关闭文件时用的是curso_activo,逻辑存在错误 - 若
~/.universidad目录不存在,ofstream不会自动创建父目录,也会触发文件打开失败
解决方案(macOS环境适配)
你需要先获取当前用户的家目录路径,拼接出完整的绝对路径,提前创建父目录后再打开文件,修改后的代码示例如下:
#include <iostream> #include <fstream> #include <string> #include <stdlib.h> #include <sys/stat.h> using namespace std; void ChangeCourse(string course) { // 获取用户家目录路径 const char* home_dir = getenv("HOME"); if (home_dir == nullptr) { cout << "Error: can't get user home directory" << endl; return; } // 拼接父目录完整路径 string config_dir = string(home_dir) + "/.universidad"; // 判断目录是否存在,不存在则创建 struct stat st; if (stat(config_dir.c_str(), &st) != 0) { // 权限设置为用户可读可写可执行,组和其他用户可读可执行 if (mkdir(config_dir.c_str(), 0755) != 0) { cout << "Error: can't create config directory" << endl; return; } } // 拼接完整的文件路径 string file_path = config_dir + "/curso_activo.txt"; ofstream active_course(file_path); // 修正变量名拼写错误 if (!active_course) { cout << "Error: can't open the file" << endl; } else { active_course << course; active_course.close(); } }
以上代码使用绝对路径定位文件,不管程序在哪个工作目录执行,都能正确找到目标路径。
内容的提问来源于stack exchange,提问作者Mario Vago Marzal
相关产品推荐
相关产品推荐

