文件无法打开,我不知道为什么

时间:2019-09-04 08:51:35

标签: c++

我的文件打开帮助

#include <iostream>
#include <fstream>
#include <string>


using namespace std;


int main()
{
    string input_file_name, output_file_name;   //file names

    ifstream infile;    //input file object
    ofstream outfile;   //output file object

    //prompt user for input file
    cout << "Enter the input file name: ";
    cin >> input_file_name;

    //open input file
    infile.open(input_file_name.c_str());

    //check if file opened successfully
    if (!infile)
    {
        cout << "Error: Unable to open file" << endl;
                cout << "Terminating program...";
                return 1;
    }
    else
    {
        cout << "Successfully opened file!";
    }
    return 0;
}

当要求用户输入时,我输入filename.txt并不会显示打开成功的消息?为什么......我的PC上有filename.txt

3 个答案:

答案 0 :(得分:0)

如果要保存文件中的值或从文件中读取值,请尝试以下操作:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    // Write values to a file
    const int size = 5;
    int values[] = { 1,2,3,4,5,6 };
    ofstream myfile("lol.txt");
    if (myfile.is_open())
    {
        for (int count = 0; count < size; count++) {
            myfile << values[count] << endl;
        }
        myfile.close();
    }
    else {
        cout << "Unable to open file";
    }

    // Write read values from a file
    std::ifstream file("lol.txt");
    if (file.is_open()) {
        std::string line;
        while (getline(file, line)) {
            cout << line.c_str() << endl;
        }
        file.close();
    }
    else {
        cout << "Unable to open file";
    }
}

答案 1 :(得分:0)

首先,请原谅我对“ goto”的使用……尝试尝试以下所示的操作,检查文件是否真正打开(将代码存根保存为“ asdf.cpp”) 。当然,您必须将数据读取到数组中,但这可能是一个不错的起点。

#include <iostream>
#include <string>                                                                                                      
#include <fstream>                                                                                                                                                                                                                            

using namespace std;                                                                                                                                                                                                                          

int main(int argc, char * argv[])                                                                                      
{                                                                                                                        
  string line;                                                                                                           
  ifstream f("asdf.cpp");

  if ( !f.is_open() )                                                                                                      
    goto error_file_not_open;                                                                                                                                                                                                                                                                                                                                          

  while( getline(f, line) )                                                                                                
    cout << line << endl;                                                                                                                                                                                                                       

  f.close();                                                                                                                                                                                                                                    

  return 0;                                                                                                                                                                                                                                   

error_file_not_open:                                                                                                     
  cout << "Could not open file" << endl;                                                                                 
  return -1;                                                                                                                                                                                                                                  
}     

答案 2 :(得分:-1)

恐怕您的文件不是ANSI-ASCII编码的文本文件。可能是以UTF-8或Unicode格式编码的。以下代码将检查文件的编码。只需尝试运行它,您就可以通过任何文本编辑器(例如vscode或notepad ++)打开lol.txt。 它将在右下角显示文件的编码格式。 防止出现此问题的另一种方法是尝试将文本文件保存为ANSC-ASCII格式。希望这会有所帮助! ^ _ ^

#include <iostream>
#include <fstream>

using namespace std;

unsigned char UTF8Header[] = {0xef, 0xbb, 0xbf};
unsigned char UNICODEHeader[] = {0xff, 0xfe};

int main()

{

    char fileName[] = "lol.txt"; // replace the file with your actual file name.
    std::ifstream in;

    char buffer[3] = {0};
    in.open(fileName, std::ios::in | std::ios::binary);
    if (!in.is_open())
    {
        std::cout << "Error opening file";
        return -1;
    }
    if (!in.eof())
        in.read(buffer, 2);

    if (!in.eof())
        in.read(buffer + 2, 1);

    if (buffer[0] == UNICODEHeader[0] && buffer[1] == UNICODEHeader[1])
        cout << "The file is encoded by unicode format" << endl;
    else if (buffer[0] == UTF8Header[0] && buffer[1] == UTF8Header[1] && buffer[2] == UTF8Header[2])
        cout << "The file is encoded by UTF-8 format" << endl;

    return 0;
}