26

我使用std::ifstream.

我可以使用相对路径 ( file.txt) 或绝对路径 ( C:\test\file.txt) 打开文件。

当我传递一个字符串作为文件名时,我不知道它是相对路径还是绝对路径。

谁能告诉我如何在文件成功打开后获取绝对路径 std::ifstream

例如:

std::ifstream file(strFile); // strFile is "file.txt" or "C:\test\file.txt"

我想在文件成功打开后获取绝对路径。

谢谢,

4

3 回答 3

22

您不能,std::ifstream不存储此信息。

但是,您可以做的是:

  1. 使用进程的当前工作目录自己组成绝对路径,或者
  2. 使用Boost.Filesystem库之类的库在相对路径和绝对路径之间进行转换。

    boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path");
    std::string abs_path_str = abs_path.string();
    
于 2010-06-11T12:33:46.873 回答
4

fstream 类没有访问或处理用于打开文件的名称的功能,C++ 标准库没有文件名处理功能——您必须自己编写代码,或者使用第三方库或操作系统——提供的功能。

于 2010-06-11T12:32:55.797 回答
2

我认为 std::fstream 不可能。我为 Windows 上的 FILE * 做了它(以非便携式方式)。查看从文件对象到文件名

您是否考虑过使用您自己的记住文件名的类来扩展 ifstream?

于 2010-06-11T16:32:44.267 回答