如何从std::ofstream变量获取相对路径对应的完整系统路径?
无法直接从
std::ofstream获取文件完整路径,解决方案如下 - 核心结论:
std::ofstream对象不会存储文件的完整系统路径,它仅负责文件IO操作,没有提供返回绝对路径的接口,所以无法直接从file1变量中提取完整路径。 - 解决思路:在打开文件前,先将相对路径转换为绝对路径,之后用绝对路径打开文件,同时可以直接打印这个绝对路径。
方法1:使用C++17标准库<filesystem>(推荐,跨平台)
#include <iostream> #include <fstream> #include <filesystem> namespace fs = std::filesystem; int main() { std::string relative_path = "./../../newfile.txt"; // 将相对路径转换为绝对路径 fs::path absolute_path = fs::absolute(relative_path); std::cout << "文件实际写入的完整路径:" << absolute_path << std::endl; // 用绝对路径打开文件 std::ofstream file1(absolute_path); if (file1.is_open()) { file1 << "Something written to file" << std::endl; file1.close(); } else { std::cerr << "文件打开失败" << std::endl; } return 0; }
方法2:平台相关API(适用于无法使用C++17的场景)
Windows平台(使用Win32 API)
#include <iostream> #include <fstream> #include <windows.h> int main() { const char* relative_path = "./../../newfile.txt"; char absolute_path[MAX_PATH]; if (GetFullPathNameA(relative_path, MAX_PATH, absolute_path, nullptr)) { std::cout << "文件实际写入的完整路径:" << absolute_path << std::endl; std::ofstream file1(absolute_path); if (file1.is_open()) { file1 << "Something written to file" << std::endl; file1.close(); } else { std::cerr << "文件打开失败" << std::endl; } } else { std::cerr << "相对路径转绝对路径失败" << std::endl; } return 0; }
Linux/Unix平台(使用realpath)
#include <iostream> #include <fstream> #include <cstdlib> int main() { const char* relative_path = "./../../newfile.txt"; char* absolute_path = realpath(relative_path, nullptr); if (absolute_path) { std::cout << "文件实际写入的完整路径:" << absolute_path << std::endl; std::ofstream file1(absolute_path); if (file1.is_open()) { file1 << "Something written to file" << std::endl; file1.close(); } else { std::cerr << "文件打开失败" << std::endl; } free(absolute_path); // 手动释放内存 } else { std::cerr << "相对路径转绝对路径失败" << std::endl; } return 0; }
内容的提问来源于stack exchange,提问作者Nitron_707
相关产品推荐
相关产品推荐

