【问题标题】:Cannot open a text file though it is in my resources file无法打开文本文件,尽管它在我的资源文件中
【发布时间】:2015-12-09 12:01:32
【问题描述】:
#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" 。文件一直打不开,请问是什么原因? 任何人都可以对此做出解释吗? 提前致谢

【问题讨论】:

  • 是你运行可执行文件的目录(即工作目录)中的txt文件吗?
  • stackoverflow.com/questions/24097580/… 与检查相关,您可能希望使用experimental::filesystem::exists({"Hamlet.txt"}) 来检查路径是否存在(或boost::filesystem,如果你'不在最新的 msvc 上)。
  • 你说的是Win32资源文件吗?
  • ifstream file("Hamlet.txt", ios::in); 将打开一个名为Hamlet.txt 的文件,该文件直接存在于当前工作中(仅此而已)。您提到“资源”,那么您在说什么资源?

标签: c++


【解决方案1】:

如果您在谈论 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”文件。

【讨论】:

    【解决方案2】:

    问题是您需要在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;
    }
    

    【讨论】:

    • 或者,您可以检查if(file),它检查std::ios::fail
    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2016-05-27
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多