虽然它在我的资源文件中,但无法打开文本文件

时间:2015-12-09 12:01:33

标签: c++

#include <fstream>
#include <iostream>
//Bear in mind that the text file is already in the resources file
int main()
{ 
      ifstream file("Hamlet.txt", ios::in);//open file
      if (file.is_open() == true) cout << "File is open" << endl;
      else if (file.is_open() == false) cout << "File isnt open" << endl;
      return 0;
}

所以我试图查看文件是否打开,文本文件位于资源文件中,因此我知道文件的路径可以写成“Hamlet.txt”。我不断得到文件不公开,可能是什么原因? 有谁可以给​​这个解释? 提前致谢

2 个答案:

答案 0 :(得分:2)

如果您在谈论Win32资源文件,则无法打开文件 像那样。您需要使用资源API:

HRSRC const rsrc = FindResource(nullptr, MAKEINTRESOURCE(HAMLET), RT_STRING);
HGLOBAL const resource = LoadResource(nullptr, rsrc);
void const* const data = LockResource(resource);
// Use your data here.

HAMLET是一个预处理器宏,用于从.rc文件中识别您的“Hamlet.txt”文件。

答案 1 :(得分:0)

问题是您需要在Hamlet.txt所在的同一目录中运行可执行文件。这是C ++中的一个大问题,所以通常你会给出文件的绝对路径,所以你可能会这样做:

ifstream file("/path/to/Hamlet.txt", ios::in);

其他一些注释:文件是打开,或者不是。因此,您不需要else if,只需使用else。此外,您可以使用非假值来表示true;所以你不需要检查== true(虽然它更明确)。您可以查看我认为更具可读性的if(file.is_open())

将这些建议放在一起,以下是您可以做的事情:

#include <fstream>
#include <iostream>

int main()
{ 
      ifstream file("/absolute/path/to/Hamlet.txt", ios::in);
      if (file.is_open()) {
        std::cout << "File is open" << std::endl;
      } else {
        std::cout << "File isnt open" << std::endl;
      }
      return 0;
}