C ++ ifstream is_open()失败

时间:2016-07-26 10:22:59

标签: c++ ifstream

为什么我的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;
}

3 个答案:

答案 0 :(得分:3)

假设代码是主要功能等,代码适用于我。

问题更可能是您用来编译程序的以太工具/ IDE将当前文件夹设置到您期望的不同位置,然后不是salt.txt文件所在的位置

答案 1 :(得分:1)

检查两件事。

  1. 如果文件确实存在于运行程序的当前文件夹中?
  2. 您是否拥有打开文件的正确权限?

答案 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文件(常见错误)