【问题标题】:ifstream can't find fileifstream 找不到文件
【发布时间】:2017-10-01 12:28:51
【问题描述】:

我正在尝试使用 ifstream 在 c++ 中打开一个文本文件,但即使该文件与 .cpp 文件位于同一目录中,它也无法找到该文件:

  #include <fstream>

  std::ifstream textInput("words.txt");
  if (!textInput) {
      return false;

我已经三重检查,文件确实存在并且命名正确。我不确定 ifstream 或路径是否有问题。

编辑:我把文件放在visual studio的当前工作目录下,文件相对路径显示为“words.txt”,但还是找不到文件。

【问题讨论】:

  • 这是一个路径问题 - 如果您从 IDE 运行,该文件需要在您的项目目录中。
  • 它是 Unicode 程序吗?如果您输入完整的绝对路径,它会起作用吗?
  • 我认为您不需要 Visual Studio 的工作目录。你想要你正在运行的程序的工作目录。

标签: c++ visual-studio


【解决方案1】:

找出您的应用程序在哪里运行(所谓的“当前工作目录”),使用:

TCHAR NPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, NPath);
std::cout << NPath << std::endl;

或者如果你使用的是 C++17,你可以使用标准库:

std::cout << std::filesystem::current_path().string() << std::endl;

确保该文件与上述 sn-ps 打印位于同一路径。

【讨论】:

  • 为什么不展示如何使用std::filesystem::current_path() 进行跨平台操作?
  • 如果有的话,this is the correct link。这是c ++ 17,他的编译器支持的机会是--> 0 ...但为了未来的访问者,我会改进我的答案:)
  • 谢谢!我将文件放在吐出的路径中,但它仍然找不到;找不到文件:(。Visual Studio 甚至将它的相对路径显示为“words.txt”
  • 作为一个实验——如果你输入绝对路径(例如它可能看起来像 "C:\somedirectory\words.txt" (Windows) 或 "/home/myname/somedirectory /words.txt" (Linux) ),它找到文件了吗?
  • 放入绝对路径也找不到文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多