为什么我的is_open()总是失败并进入显示错误消息的else语句?
我的另一种方法与此类似,但它有效。
#include <iostream>
#include <fstream>
using namespace std;
int main() {
string userName;
cout << "Please login to your account here!" << endl;
cout << "Username: ";
cin >> userName;
ifstream openSalt;
openSalt.open("salt.txt"); //open the file
if(openSalt.is_open()) //if file is open
{
string temp;
while (getline(openSalt,temp))
{
//gets content
//if user exists, login
//else, exit
}
openSalt.close();
}
else
{
cout << "Error opening file!" << endl;
exit(1);
}
return 0;
}
答案 0 :(得分:3)
假设代码是主要功能等,代码适用于我。
问题更可能是您用来编译程序的以太工具/ IDE将当前文件夹设置到您期望的不同位置,然后不是salt.txt文件所在的位置
答案 1 :(得分:1)
检查两件事。
答案 2 :(得分:0)
使用此函数来获取错误:
std::string GetLastErrorAsString()
{
//Get the error message, if any.
DWORD errorMessageID = ::GetLastError();
if (errorMessageID == 0)
return std::string(); //No error message has been recorded
LPSTR messageBuffer = nullptr;
size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
std::string message(messageBuffer, size);
//Free the buffer.
LocalFree(messageBuffer);
return message;
}
然后在你的其他地方打电话
else
{
cout << GetLastErrorAsString() << endl;
system("pause");
exit(1);
}
我使用了你的代码并且它有效,确保文件在同一目录中,确保你没有使用salt.txt.txt文件(常见错误)