无法打开文本文件,尽管它在我的资源文件中

Cannot open a text file though it is in my resources file

本文关键字:我的 资源 源文件 文本 文件      更新时间:2023-10-16
#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;
}

所以我正在尝试查看文件是否打开,文本文件在资源文件中,因此据我所知,文件的路径可以写为"哈姆雷特.txt"。我不断收到文件未打开,可能是什么原因?谁能对此做出解释?提前致谢

如果您谈论的是 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"文件。

问题是您需要在Hamlet.txt所在的同一目录中运行可执行文件。这在C++中是一个大问题,因此通常您将提供文件的绝对路径,因此您可以执行以下操作:

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

其他一些注意事项:文件要么打开,要么未打开。因此,您不需要else if,您可以简单地使用else。此外,您可以使用非假值来指示真;所以你不需要检查== 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;
}