如何获取现有文件的路径?

时间:2017-01-05 01:02:36

标签: c++ file path

我正在创建一个文件流,如下所示:

ofstream myfile;
myfile.open(fileName);

现在如何获取名为fileName的文件的完整路径?请注意,fileName可以是相对路径,而不是完整路径。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

请参阅:std::basic_ofstream

没有方法可以检索用于打开流的路径。您必须自己跟踪fileName

编辑:问题已经编辑,因为我回答了它。使用C ++ 17可以从相对路径获取绝对路径。请参阅std::filesystem::absolute

答案 1 :(得分:2)

如果您有权访问C ++ 17,则可以使用新的<filesystem>标头。如示例所示:

#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
    std::cout << "Current path is " << fs::current_path() << '\n';
}

对于已知文件,可以使用以下内容:

#include <iostream>
#include <filesystem>
#include <string>

namespace fs = std::filesystem;
int main()
{
    std::string fileName("foo.txt"); // From example in question
    auto filePath = fs::path(fileName);
    std::cout << "Absolule path for " << fileName << " is " << fs::absolute(filePath) << '\n';
}

注意:我实际上没有C ++ 17编译器来验证这个......

如果您需要早期C ++版本的解决方案,请尝试boost::filesystem

boost::filesystem::path full_path( boost::filesystem::current_path() );
std::cout << "Current path is : " << full_path << std::endl;