1

所以我正在开发一个类程序,我们必须打开两个不同的文本文件来检索要在控制台中显示的适当文本。我的代码没有打开文件并不断输出 else 语句“.txt 文件无法打开”。我尝试了几种不同的方法来打开文件,但没有运气。在这里的任何帮助将不胜感激。

//
//  main.cpp
//  PunchLine program
//  Page 896 Problem 3
//
//

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    //File stream objects
    fstream inFile;
    string line;

    //Open joke file to read lines to console
    inFile.open("joke.txt", ios::in);

    if (inFile.is_open())
    {
        //Read lines from file to console
        while (getline(inFile, line))
        {
            cout << line << endl;
            inFile.close();
        }
    }    
    else 
        cout << "joke.txt file cannot be open.\n";

    //Open punchline file to read last line joke to console
    inFile.open("punchline.txt", ios::in);

    if (inFile.is_open())
    {
        //Read last line from file to console
        inFile.seekp(-52L, ios::end);
        getline(inFile, line);
    }    
    else 
        cout << "punchline.txt file cannot be open.\n";

    return 0;
}
4

5 回答 5

2

声明输入文件时使用 ifstream inFile; 还要确保输入文件与 .exe 位于同一文件夹中

编辑:http ://www.cplusplus.com/doc/tutorial/files/同样,这个链接应该有助于处理文件。

编辑2:我已经在评论中发布了这个,但我只是将它添加到官方答案中:“更改你的while循环。而不是if测试,使用while(inFile.is_open())然后使用你的“

于 2013-10-21T15:03:38.767 回答
1

我认为您不应该在 while 循环内关闭文件。否则,只有第一行被读入后,您的文件才会关闭。将 close 语句移到循环之外。第二块也一样。

if (inFile.is_open())
{
    //Read lines from file to console
    while (getline(inFile, line))
    {
        cout << line << endl;        
    }
    inFile.close();
}    
else 
    cout << "joke.txt file cannot be open.\n";
于 2013-10-21T15:04:38.017 回答
0

我认为您需要冲洗屏幕。一旦您刷新并关闭了流。下次运行应用程序时,它应该打开该文件。

e.g.
inFile.flush();
inFile.close();
于 2013-10-21T15:37:18.480 回答
0

利用

if(!infile)
{
cout<<"cannot open file";
}
于 2013-10-21T15:05:46.213 回答
0

检查您的文件是否存在。如果是,请检查您打开它时是否有正确的路径(检查您的 .txt 文件是否与 .exe 文件位于同一目录中,或在代码中指定完整路径)。如果是,请检查文件是否为只读文件。

于 2013-10-21T15:01:14.660 回答