【问题标题】:How to get the path to an existing file?如何获取现有文件的路径?
【发布时间】:2017-05-19 10:43:25
【问题描述】:

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

ofstream myfile;
myfile.open(fileName);

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

有什么想法吗?

【问题讨论】:

  • 你会用 C++17 吗?
  • 他们已经安装了visual studio15,我们可以使用它支持的任何代码
  • 您必须使用 RTM 版本的 Visual Studio 2017,并使用 /std:latest(或类似选项)进行编译以获得实验性 C++17 支持。
  • 我可以下载VisualStudio2017,但是我在大学尝试编译我的代码时会遇到问题,所以我必须使用2015版本...

标签: c++ file path


【解决方案1】:

见:std::basic_ofstream

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

编辑:问题在我回答后已被编辑。使用 C++17 可以从相对路径获取绝对路径。见std::filesystem::absolute

【讨论】:

  • 我需要一些通用的家庭作业,我在家里做这个,但它将在大学进行测试......教授希望我们生成保存文件的路径..你确定那里没有别的办法吗?
  • @IgorBeracka std::filesystem 提供有关文件系统的新功能。我还不是 100% 熟悉它,但我现在没有任何功能可以让您从 std::ofstream 恢复路径。
  • @IgorBeracka 我已经更新了我对编辑问题的回答。
  • @IgorBeracka 如果您愿意将自己限制在单一平台或编译器,还有其他潜在的解决方案。
【解决方案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;

【讨论】:

  • OP 想知道fileName 的完整路径,而不是可执行文件的完整路径。
  • @Rakete1111 是的,我想知道文件名的完整路径等。C:\Directory\fileName
  • 好的,用未经测试的代码更新以获得完整路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多