#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”。我不断得到文件不公开,可能是什么原因? 有谁可以给这个解释? 提前致谢
答案 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;
}