如何从C++中的std::ifstream获取文件路径

27

我使用std::ifstream打开一个文件。

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

由于我将字符串作为文件名传递,因此我不知道它是相对路径还是绝对路径。

有人能告诉我如何在成功使用std::ifstream打开文件后获取绝对路径吗?

例如:

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

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

谢谢。


你是在做控制台应用程序还是使用框架来实现某种用户界面(UI)? - Alerty
4个回答

23

你无法这样做,因为std::ifstream不会存储此信息。

然而,你可以:

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

boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path");
std::string abs_path_str = abs_path.string();

4

fstream类没有访问或处理打开文件名的功能,C++标准库也没有文件名处理函数 - 您需要自己编写代码,或使用第三方库或操作系统提供的函数。


3

我认为对于std :: fstream是不可能的。 我曾经在Windows上以非可移植的方式为FILE *完成了这项工作。请参见从文件对象到文件名

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


4
如果投票反对这个五年前的回答的人留下评论解释一下错在哪里会很有帮助。 - Michael J

0
只需在外部范围中声明std::string strFile,以便在其他范围中也可以访问它,就像全局变量一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接